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. JDK,JRE,JVM三者之间的关系和作用

    1,定义: JDK: Java Develpment Kit java 开发工具 bin:最主要的是编译器(javac.exe) include:java和JVM交互用的头文件 lib:类库 JRE: ...

  2. [php]配置文件中的超时时间

    概要 php.ini l  max_execution_time l  max_input_time php-fpm.conf l  process_control_timeout l  reques ...

  3. WEBSERVICE之CXF框架开发webservice

    之前学习了使用jdk开发webservice服务,现在开始学习使用框架(cxf)开发webservice. 1.准备工作 A.使用cxf开发webservice服务,需要用到apache-cxf-3. ...

  4. ES6参数默认值,剩余参数及展开数组

    一.函数的参数默认值 在ES6之前,想要给参数设置默认值得话,只能在函数体内部加判断设置,比如如果传递参数为undefined时为true, 否则为false,如下图example1,ES6出现语法可 ...

  5. Vue自动化路由(基于Vue-Router)开篇

    vue自动化路由 好久不见~ 若羽又开篇Vue的内容了. 年初的时候发布了第一版的ea-router自动化路由库,欢迎大家安装使用.[Github地址] [npm地址] 经历一年的使用.还是发现了不少 ...

  6. 2018年第九届蓝桥杯B组(201806-----递增三元组)

    给定三个整数数组 A = [A1, A2, - AN], B = [B1, B2, - BN], C = [C1, C2, - CN], 请你统计有多少个三元组(i, j, k) 满足: 1 < ...

  7. 5款极简极美WordPress主题,亲测可用附送源码

    2020年深冬,新闻上报道是.从1950年以来最寒冷的冬天. 一个周六的下午,我找遍了全网的简约博客主题,搭建了三年来的第7个独立博客, 多么难得的周末啊,我却在家花了一整天的时间.整理出直接套用5️ ...

  8. go判断字符串是否是IP地址

    前言 现在有这样的需求 正文 使用net包 net包的方法可以判断是否是 ip,需要注意的是 ip 分为 ipv4 和 ipv6 此方法将 v4 和 v6 一起判断出来 address := net. ...

  9. uber_go_guide解析(二)

    前言 接上回 正文 错误消息 Go中声明错误有几种方式 errors.New() 简单的声明静态字符串信息的错误 fmt.Errorf 可以格式化插入信息的错误 自己实现 Error() 方法 使用e ...

  10. Redis Cluster 集群节点维护 (三)

    Redis Cluster 集群节点维护: 集群运行很久之后,难免由于硬件故障,网络规划,业务增长,等原因对已有集群进行相应的调整,比如增加redis nodes 节点,减少节点,节点迁移,更换服务器 ...