这真的是披着CF外衣的OI赛制?我怎么觉得这是披着部分分外衣的CF?果然每逢cf赛制必掉rating,还是得%%%cyc橙名爷++rp。。
A题就是找一找序列里有没有两个连在一起的0或1,并且不能向两端延伸(比如……1001……或110……或者……100),找到了之后就可以把整个序列分成这两个数左边,这两个数和他的右边三部分,然后这两个0或1每个都能与左边右边串在一起构成两个相同的子序列,并且这个子序列在原序列中只会出现这两次,满足题目条件。如果没找到,再看看原来的序列里是不是只有两个0或1,那么这样单独一个0或1也只在序列里出现两次。要是上边两种情况都不满足,那么随便想想就知道不可能存在只出现两次的子序列。(cyc写n>10输出Y也过了,,,n很大的时候N的概率确实很小)
#include<algorithm> #include<cmath> #include<cstring> #include<cstdlib> #include<cstdio> using namespace std; char s[5010]; int main() { int n,i,sum=0; scanf("%s",s); n=strlen(s); for(i=0;i<n;i++) if(s[i]=='0')sum++; int flag=0; if(sum==2||n-sum==2||(s[0]==s[1]&&s[1]!=s[2]))flag=1; for(i=3;i<=n;i++) if(s[i-3]!=s[i-2]&&s[i-2]==s[i-1]&&s[i-1]!=s[i])flag=1; if(flag)printf("Y");else printf("N"); }