点击打开链接 CF上的题目有趣,且偏向思维能力的锻炼,而不是枯燥无味的高深算法。
看似简单的算法,背后却蕴含着思维的结晶。
这题题意先必须看懂!题意:含有01字串,含有1的个数的奇数叫奇数字串,反之亦然。不论奇偶字符都可以在前面划掉0,1.而奇串只能在后面添加1,偶串只能添加0。给出A,问t通过变换能否得到B.。
由于偶串,不管怎样变换,最多不会超出原来1的个数,而奇串最多不会超出原来1的个数加1.而任意字串的1的个数小于A最多1的个数,都可以通过变换得到!。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std ;
int main()
{
int len1,len2,x,y;
char s1[1001],s2[1001];
while(scanf("%s %s",&s1,&s2)!=EOF){
len1=strlen(s1);
len2=strlen(s2);
x=y=0;
for(int i=0;i<len1;i++){
if(s1[i]=='1') x++;
}
for(int i=0;i<len2;i++){
if(s2[i]=='1') y++;
}
if(x&1) x++;
printf(x>=y?"YES\n":"NO\n");
}
return 0 ;
}