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的更多相关文章

随机推荐

  1. javap使用

    在反编译前你当然需要先编译这个类了进入当前目录下:javac -g SynchronizedTest.java(使用-g参数是因为要得到下面javap -l时的输出需要使用此选项) 编译完成后,我们在 ...

  2. 【Redis】内部数据结构自顶向下梳理

    本博客将顺着自顶向下的思路梳理一下Redis的数据结构体系,从数据库到对象体系,再到底层数据结构.我将基于我的一个项目的代码来进行介绍:daredis.该项目中,使用Java实现了Redis中所有的数 ...

  3. 痞子衡嵌入式:Farewell, 我的2020

    -- 题图:苏州大学老校门 2020年的最后一天,痞子衡驱车300多公里从苏州赶回了苏北老家(扬州某边陲小镇),连镇铁路虽然新通车了,解决了苏南苏北多年的铁路不直通问题,但奈何痞子衡老家小镇离最近的火 ...

  4. 单细胞分析实录(1): 认识Cell Hashing

    这是一个新系列 差不多是一年以前,我定导后没多久,接手了读研后的第一个课题.合作方是医院,和我对接的是一名博一的医学生,最开始两边的老师很排斥常规的单细胞文章思路,即各大类细胞分群.注释.描述,所以起 ...

  5. nohup命令说明-转载

    转自:https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/ 我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangu ...

  6. post请求下载文件,获取Content-Disposition文件名

    1.post下载文件代码,doload方法 import request from "../../src/utils/request"; import { API } from & ...

  7. 如何开启服务器 thinkphp pathinfo的访问方式

    这篇文章主要介绍了ThinkPHP中pathinfo的访问模式.路径访问模式及URL重写总结,是ThinkPHP路由访问的基础知识,在ThinkPHP开发中非常重要,需要的朋友可以参考下 本文针对Th ...

  8. 万万没想到,面试中,连 ClassLoader类加载器 也能问出这么多问题…..

    1.类加载过程 类加载时机 「加载」 将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在内存上创建一个java.lang.Class对象用来封装类在方法区内的数据 ...

  9. LeetCode557 反转字符串中的单词 III

    给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode contest" 输出: &q ...

  10. leetcode 470. 用 Rand7() 实现 Rand10() (数学,优化策略)

    题目链接 https://leetcode-cn.com/problems/implement-rand10-using-rand7/ 题意: 给定一个rand7()的生成器,求解如何产生一个rand ...