POJ3087-Shuffle'm Up

来源:互联网 发布:网络推广外包收费 编辑:程序博客网 时间:2024/04/29 07:42

题目链接:点击打开链接

洗牌,2组牌s1,s2。每组给出m张牌,给出想要的组合s,s1插在s2上面,形成s,若与给出的s一致则输出轮数与次数,不是则继续,将s12在分开,下面是s1,上面是s2,若无法实现输出-1。

用了个之前见到还没用过的函数:strncpy(s,s1,n); 一看就懂吧,还算好用,不过拆的时候注意补'\0'。

//188K0MS//C++974B#include <cstring>#include <cstdio>#include <map>#include <string>using namespace std;int main(){    int i,j,l,n,sum,m;    char s[422],str1[211],str[211],s1[422];    map<string,int> vis;    scanf("%d",&n);    for(j=1;j<=n;j++)    {        vis.clear();        sum=0;        scanf("%d",&m);        scanf("%s",str);        scanf("%s",str1);        scanf("%s",s);        while(1)        {            l=0;sum++;            for(i=0;i<m;i++)            {                s1[l++]=str1[i];                s1[l++]=str[i];            }            s1[l]='\0';            if(strcmp(s1,s)==0)            {                printf("%d %d\n",j,sum);                break;            }            else if(vis[s1])            {                printf("%d -1\n",j);                break;            }            vis[s1]=1;            strncpy(str,s1,m);            str[m]='\0';            strncpy(str1,s1+m,2*m);            str1[m]='\0';        }    }}

0 0
原创粉丝点击