题意:给出两个只有a,b,c组成的字符串,可以通过删除或者是增加aa,bb,abab改变字符串,问能不能从第一个字符串变成第二个字符串。
条件:1 字符串只有a,b,c组成
2 通过删除或者是增加aa,bb,abab改变字符串
3 样例:ab->aababb->babb->ba启示,在没有c的情况下ab的位置是没有关系,那么就只用考虑ab的奇偶个数关系,以每个c为分界点。
思路:以每个c为分界点,考虑每个分成的集合里面ab的奇偶关系,对比两个字符串就好了。比较奇偶的时候可以通过位运算来计算:a^0=a ,a^a=0,b^a^a=b,这样就可以求出每一段剩余的。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
const int maxn=10000;
int l[2][maxn+5];
int transform_s(int x,string s)
{
int sum=0,num=0;
for(int i=0;i<=s.size();i++)
{
if(i==s.size()||s[i]=='c')
{
l[x][num++]=sum;
sum=0;
}
else
sum^=s[i];
}
return num;
}
int main()
{
string a,b;
while(cin>>a>>b)
{
memset(l,0,sizeof(l));
int numa=transform_s(0,a);
int numb=transform_s(1,b);
int flag=0;
int i;
for(i=0;i<numa&&i<numb;i++)
{
if(l[0][i]!=l[1][i])
{
flag=1;
break;
}
}
if(numa!=numb)
flag=1;
if(flag==1)
printf("No\n");
else
printf("Yes\n");
}
return 0;
}
总结:1 当时有种畏难情绪,最近组队训练感觉贡献太少了有点失落