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. springMVC框架连接数据库查询数据

    1.框架搭建,创建一个maven项目打war包 web.xml文件 <?xml version="1.0" encoding="UTF-8"?> & ...

  2. Qt学习笔记-中文乱码-QtWebkit显示网页乱码的问题QFont::setPixelSize: Pixel size <= 0 (0)

    在使用webkit的时候显示中文乱码,同时出现警告 QFont::setPixelSize: Pixel size <= 0 (0) 后来发现是插件的问题. 将安装目录的plugin/codec ...

  3. Scrum转型(二) Scrum的角色

    1.1 ScurmMaster 作为Scrum流程的捍卫者和布道者,ScrumMaster在Scrum团队中起到至关重要的作用,他们确保团队使用正确的流程,确保团队正确地召开各种会议,他们训练团队的敏 ...

  4. python之scrapy框架基础搭建

    一.创建工程 #在命令行输入scrapy startproject xxx #创建项目 二.写item文件 #写需要爬取的字段名称 name = scrapy.Field() #例 三.进入spide ...

  5. 敏捷史话(二):Scrum社区的悲剧性损失——Mike Beedle

    2018年3月23日,在美国的芝加哥发生了一起意外刺杀事件.一名男子刺杀了一位首席执行官,而这位不幸的首席执行官就是<敏捷宣言>的合著者--Mike Beedle.Mike 的这场意外令 ...

  6. linux下如何看系统日志及Out Of Memery

    1.一个Out Of Memery(OOM)导致的崩溃. linux系统经常会由于资源的问题导致自己的程序莫名被杀掉,可以从linux的系统日志中找到答案: vi /var/log/message - ...

  7. 记录一次spring与jdk版本不兼容的报错

    由于公司项目是普通的web工程,没有用上maven,所以笔者在jdk1.8版本下运行项目报了这样的错误 [ERROR]: 2020-03-09 09:38:50 [org.springframewor ...

  8. win7安装oracle11g和oracle client和pl/sql

    一.安装oracle11g 1.下载Oracle 11g R2 for Windows的版本 下载地址:hhttps://www.oracle.com/technetwork/database/ent ...

  9. Linux简单Shell脚本监控MySQL、Apache Web和磁盘空间

    Linux简单Shell脚本监控MySQL.Apache Web和磁盘空间 1. 目的或任务 当MySQL数据库.Apache Web服务器停止运行时,重新启动运行,并发送邮件通知: 当服务器磁盘的空 ...

  10. 【Linux】如何查找命令及历史记录history

    如何查找命令及历史记录 文章目录 如何查找命令及历史记录 1.如何找到一个命令 2.命令的历史记录 3.一些实用的快捷键 4.小结 5.参考资料 如何找到一个命令.命令的历史记录.一些实用的快捷键.总 ...