POJ 3087 Shuffle'm Up(模拟题)

来源:互联网 发布:mac dts 转 wav 编辑:程序博客网 时间:2024/06/04 08:12
Shuffle'm Up 

 

大意:

已知两堆牌s1和s2的初始状态, 其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块牌归为s1,最顶的c块牌归为s2,依此循环下去。现在输入s1和s2的初始状态 以及 预想的最终状态s12。问s1 s2经过多少次洗牌之后,最终能达到状态s12,若永远不可能相同,则输出"-1"

 

思路:就是个字符串模拟题。

#include <stdio.h>#include <string.h>void Solve(){    int n, m;    char s1[110], s2[110], s3[210], s4[210], s[210];    scanf("%d", &n);    for(int p = 1; p <= n; p++)    {        memset(s, 'a', sizeof(s));        scanf("%d%*c", &m);        scanf("%s%s%s", s1, s2, s3);        printf("%d ", p);        strcpy(s, s1);        strcat(s, s2);        strcpy(s4, s);        int t;        for(t = 0; strcmp(s, s3); t++)        {            for(int j = 0; j < m; j++)            {                s1[j] = s[j];                s2[j] = s[j+m];            }            int i, j;            for(i = 0, j = 0; i < m; i++, j+=2)            {                s[j] = s2[i];                s[j+1] = s1[i];            }            if(strcmp(s4, s) == 0)            {                t = -1;                break;            }        }        printf("%d\n", t);    }}int main(void){    //freopen("data.in", "r", stdin);    Solve();    return 0;}



0 0
原创粉丝点击