POJ 3087 (简单map + 模拟)

来源:互联网 发布:源码天空 编辑:程序博客网 时间:2024/06/08 09:26

POJ 3087

题意:给出洗牌的方式,问几次能洗出要求的牌。


洗牌方式就是插入,很简单。

用map<string,int >visit 记录是否出现过。


值得学习的就是这种想法,用map记录判断是否能洗出这种牌。


#include<iostream>#include<cstring>#include<map>using namespace std;int main(){    int t = 0,text;    cin>>text;    while(++t <= text){        int n;        cin>>n;        char s1[205],s2[205],s12[410];        cin>>s1>>s2>>s12;        map<string,int>visit;        visit[s12] = true;        int step = 0;        while(true){            char s[410];            int all = 0;            for(int i = 0;i < n; i++){                s[all++] = s2[i];                s[all++] = s1[i];            }            s[all] = '\0';            step++;            if(!strcmp(s,s12)){                cout<<t<<" "<<step<<endl;                break;            }            else if(visit[s] && strcmp(s,s12)){                cout<<t<<" "<<"-1"<<endl;                break;            }            visit[s] = true;            for(int i = 0;i < n; i++){                s1[i] = s[i];            }            s1[n] = '\0';            for(int k = n,i = 0;k < 2*n; k++,i++){                s2[i] = s[k];            }            s2[2*n] = '\0';        }    }    return 0;}


0 0
原创粉丝点击