string+模拟——小A和小C

来源:互联网 发布:最好的win10优化工具 编辑:程序博客网 时间:2024/05/21 10:09

题目来源

DBSDFZOJ小A和小C
http://218.62.22.209:8080/problem.php?cid=1485&pid=0


题目描述

小A和小C是好朋友。

有一天,他们获得了一个字符串,这个字符串中只可能出现大写英文字母。

小A喜欢AC,小C喜欢CA,所以小A希望从这个字符串里找到一个AC然后挖走,小C也希望从这个字符串里找到一个CA然后挖走。任何一个人挖走一个字符串后,他们都会用BB填充原来的位置。

举个例子:如果原串为CACA,小A挖走了中间的AC,那么这个串就会变成CBBA。

他们找到了正在准备NOIP的你,希望你来告诉他们,他们的愿望能否同时得到满足?


样例输入

ACA

CABFAC


样例输出

NO

YES


数据范围

对于30%的数据,保证n<=1000。

对于100%的数据,保证n<=10^5,数据组数不超过10。这里的N表示的是单个字符串的长度。


思路

模拟

第一次询问 查询字符串内是否有“AC” 如果有 删去“AC” 置为“BB”

查询是否有“CA” 如果有 符合条件

如果第一次询问不符合条件 进行第二次询问

查询字符串内是否有“CA” 如果有 删去“CA” 置为“BB”

查询是否有“AC” 如果有 符合条件

如果两次都不符合条件 输出“NO”

否则 输出“YES”


代码(C++)

#include <cstdio>#include <iostream>using namespace std;int pos,w;string s;void ask1(string s);void ask2(string s);int main(){while(cin>>s){w=0;ask1(s);if(w==0)ask2(s);if(w==0)printf("NO\n");elseprintf("YES\n");}return 0;}void ask1(string s){pos=s.find("AC");if(pos==-1)return ;s.erase(pos,2);s.insert(pos,"BB",2);pos=s.find("CA");if(pos==-1)return ;w=1;return ;}void ask2(string s){pos=s.find("CA");if(pos==-1)return ;s.erase(pos,2);s.insert(pos,"BB",2);pos=s.find("AC");if(pos==-1)return ;w=1;return ;}