2018CCPC中国大学生程序设计竞赛全国邀请赛(湖南)----hdu 6282--G.String Transformation

题意:给两个串,s和t(只包含a,b,c三种字母),可以对串进行删除或者增加 aa,bb,abab.的操作。问是否能把s串变成t串。

思路:首先,c无法增加和删除,所以只需要考虑c的数量相同和两个c之间的ab串是否匹配。由题意可知  1、aa,bb,abab,等价于空串,空串等价这三个串。2、其次   ab可推出ba,反之也行。3、a => bab=>abb,右边可以无限加两个b。4、a=>bab=>bba,同理左边可以无限加两个b。5、b=>aba=>aab,左边无限加两个a。6、b=>aba=>baa,右边无限加两个aa。所以我们得知,如果s串是奇数个b或者a,那么必定t串也是奇数个b或者a,所以,只要考虑两个c之间的a,b,的奇偶是否相同就行了。代码如下:

#include 
#include 
#include 

using namespace std;
const int maxn = 1e4+100;
char s[maxn],t[maxn];

int main(){
    while(~scanf("%s\n%s",s,t)){
        bool flag = true;
        int n = strlen(s);
        int m = strlen(t);
        s[n] = 'c';
        s[n+1]='\0';
        t[m]='c';
        t[m+1]='\0';
        ++n,++m;
        int Sa = 0,Sb = 0;
        int Ta = 0,Tb = 0;
        int i=0,j=0;
        while(i

你可能感兴趣的:(ACM。,简单暴力)