CF1428C
Description
有一个只包含'A'与'B'的字符串,每次可以消掉一个 “AB” 或一个 “BB”,并把剩下的拼在一起,求字符串最短的长度。
题意已经够简洁了;
这是今天校内魔泥赛唯一一道水题。
Solution
1.
可以用栈维护元素。
这里推荐用 STL 里的 stack,可能有点慢,但是好用也不会超时;
手写栈清空时直接把头指针归零就好了,memset 遇到大数据会被卡。
2.
如果用贪心做此题,要注意修改的优先性。
一定是先消除所有的 “AB”,再消除剩下的 “BB”。
正确性证明:
如果优先消除 “BB”,可能会出现剩余的 “A” 无法被消除的情况。
比如 “AAAABBBB”,正确的做法是每一个 “A” 与“B”组队消除,剩下的依次拼接消除,答案是 0;
如果优先消除了 “BB” 或者遇到哪一对消除哪一对,可能会有 “A” 剩余,剩下 “AAAA” 或者 “AA” 的情况,而这并不是最短的。
我用的 STL 维护栈毕竟好写
Code
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
using namespace std;
int t;
string a;
stack<int> st;
int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0' ||ch>'9'){
if(ch=='-') w=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') s=(s<<1)+(s<<3)+ch-'0',ch=getchar();
return s*w;
}
int main(){
t=read();
for(int i=0;i<t;i++){
cin>>a;
int tot=a.length();
st.push(a[0]);
for(int j=1;j<tot;j++){
if(st.size()){
if(a[j]=='B' &&((char)st.top()=='A'||(char)st.top()=='B')){
st.pop();
continue;
}
}
st.push(a[j]);
}
printf("%d\n",st.size());
while(st.size()) st.pop();
}
return 0;
}
CF1428C的更多相关文章
随机推荐
- javap使用
在反编译前你当然需要先编译这个类了进入当前目录下:javac -g SynchronizedTest.java(使用-g参数是因为要得到下面javap -l时的输出需要使用此选项) 编译完成后,我们在 ...
- 【Redis】内部数据结构自顶向下梳理
本博客将顺着自顶向下的思路梳理一下Redis的数据结构体系,从数据库到对象体系,再到底层数据结构.我将基于我的一个项目的代码来进行介绍:daredis.该项目中,使用Java实现了Redis中所有的数 ...
- 痞子衡嵌入式:Farewell, 我的2020
-- 题图:苏州大学老校门 2020年的最后一天,痞子衡驱车300多公里从苏州赶回了苏北老家(扬州某边陲小镇),连镇铁路虽然新通车了,解决了苏南苏北多年的铁路不直通问题,但奈何痞子衡老家小镇离最近的火 ...
- 单细胞分析实录(1): 认识Cell Hashing
这是一个新系列 差不多是一年以前,我定导后没多久,接手了读研后的第一个课题.合作方是医院,和我对接的是一名博一的医学生,最开始两边的老师很排斥常规的单细胞文章思路,即各大类细胞分群.注释.描述,所以起 ...
- nohup命令说明-转载
转自:https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/ 我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangu ...
- post请求下载文件,获取Content-Disposition文件名
1.post下载文件代码,doload方法 import request from "../../src/utils/request"; import { API } from & ...
- 如何开启服务器 thinkphp pathinfo的访问方式
这篇文章主要介绍了ThinkPHP中pathinfo的访问模式.路径访问模式及URL重写总结,是ThinkPHP路由访问的基础知识,在ThinkPHP开发中非常重要,需要的朋友可以参考下 本文针对Th ...
- 万万没想到,面试中,连 ClassLoader类加载器 也能问出这么多问题…..
1.类加载过程 类加载时机 「加载」 将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在内存上创建一个java.lang.Class对象用来封装类在方法区内的数据 ...
- LeetCode557 反转字符串中的单词 III
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode contest" 输出: &q ...
- leetcode 470. 用 Rand7() 实现 Rand10() (数学,优化策略)
题目链接 https://leetcode-cn.com/problems/implement-rand10-using-rand7/ 题意: 给定一个rand7()的生成器,求解如何产生一个rand ...