hdu_4545_魔法串

来源:互联网 发布:淘宝美工培训班多少钱 编辑:程序博客网 时间:2024/04/30 11:44

17号西山居初赛最简单的题~

给一个替换规则问能不能从第二个串中通过替换找到第一个串~比赛时候因为研究有没有可能 a->b->c而WA了好几次-_-###


源代码:

#include<myhead>const int N=26;const int M=1011;string a,b;int da[M],db[M];bool Hash[M];bool make[N][N];int cy[M];void init() {    memset(make,false,sizeof(make));    memset(cy,-1,sizeof(cy));    cin>>a>>b;    for(int i=0;i<a.size();++i) {        da[i]=a[i]-'a';    }    for(int j=0;j<b.size();++j) {        db[j]=b[j]-'a';    }    int n;    cin>>n;    string ta,tb;    for(int i=0;i<N;++i) {        make[i][i]=true;    }    for(int i=0;i<n;++i) {        cin>>ta>>tb;        make[ta[0]-'a'][tb[0]-'a']=true;    }}/*void floyed() {    for(int k=0;k<N;++k) {        for(int i=0;i<N;++i) {            for(int j=0;j<N;++j) {                make[i][j]=make[i][j]||(make[i][k]&&make[k][j]);            }        }    }}*/bool dfs(int x,int y) {    if(x==a.size())        return true;    if(y==b.size())        return false;    if(make[db[y]][da[x]]) {        return dfs(x+1,y+1);    } else {        return dfs(x,y+1);    }}int main() {    int  t;    cin>>t;    int m=1;    while(t--) {        init();        //floyed();        cout<<"Case #"<<m<<": ";        if(dfs(0,0)) {            cout<<"happy"<<endl;        } else {            cout<<"unhappy"<<endl;        }        m++;    }    return 0;}


原创粉丝点击