Codeforces Round #306 (Div. 2) 550A Two Substrings

链接:http://codeforces.com/contest/550/problem/A

这是我第一次玩cf这种比赛,前面做了几场练习,觉得div2的前面几个还是比较水的。

所以看到这道题我果断觉得是拼手速的题啊,结果瞬间就一发WA,连pretest都没通过,

然后开始想,发现没那么简单的样子,很多坑的样子,当我写了2个循环把AB BA 都扫一遍时,

认为考虑周全后,觉得能过了,就交,过了pretest,当时看room里面 大多数还没过A呢,觉得很高兴。

然后学长说这题能叉很多人,我不懂什么是叉,后来才知道原来这就是所谓的hack。学长给我数据叫我去hack

别人,说这数据绝对能hack很多人,还截图给我 他们room好多都被他hack了。我点开许多人的代码,各种语言都有的,

看来看去感觉都能过啊,就没去hack了,因为才做了一题,还要做下面的题目。结果当我过了第二题时,突然弹出我被hack的消息。。。

我还想去resubmmit呢,不懂规则也是悲剧啊。把C题不考虑的写了写,交过了pretest,觉得圆满了,谁知道原来这只是部分数据了。

打完第一次cf,懂了很多规则,的确很刺激,好玩,下面就讲A题了。

我搞来搞去,觉得分情况是最保险的了,因为情况数比较少。

扫一遍 得到AB  和 BA的个数a,b

1:如果a,b有一个为0 那么NO

2:如果a ,b都为1 ,那么在原串中找是否存在子串ABA 或者BAB 存在 NO,否则 YES

3:如果a,b中有一个为1,另一个为2,找是否存在子串ABAB,或者BABA 存在NO 否则YES

4如果 a,b >=2 那么不会存在覆盖的问题,YES

代码如下

 1 #include<stdio.h>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<stack>
 5 #include<queue>
 6 #include<ctype.h>
 7 #include<math.h>
 8 #include<algorithm>
 9 #include<string.h>
10 #include<set>
11 using namespace std;
12 const int maxn = 1e5+5;
13 char s[maxn];
14 int main()
15 {   int a = 0,b = 0;
16     cin>>s;
17     int len = strlen(s);
18     for(int i = 0;i<len;i++)
19     {
20         if(s[i]=='A'&&s[i+1]=='B') a++;
21         if(s[i]=='B'&&s[i+1]=='A') b++;
22     }
23     if(!a||!b) puts("NO");
24     else
25     {
26         if(a==1&&b==1)
27         {
28             if(strstr(s,"ABA")||strstr(s,"BAB")) puts("NO");
29             else  puts("YES");
30         }
31         else if(a==2&&b==1&&strstr(s,"ABAB")) puts("NO");
32         else if(b==2&&a==1&&strstr(s,"BABA")) puts("NO");
33         else puts("YES");
34     }
35 
36     return 0;
37 }
原文地址:https://www.cnblogs.com/jiachinzhao/p/4576014.html