zoukankan      html  css  js  c++  java
  • POJ 3087 Shuffle'm Up(模拟题)

    Shuffle'm Up
     

    大意:

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

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

     
     
     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 void Solve()
     5 {
     6     int n, m;
     7     char s1[110], s2[110], s3[210], s4[210], s[210];
     8     scanf("%d", &n);
     9     for(int p = 1; p <= n; p++)
    10     {
    11         memset(s, 'a', sizeof(s));
    12         scanf("%d%*c", &m);
    13         scanf("%s%s%s", s1, s2, s3);
    14         printf("%d ", p);
    15         strcpy(s, s1);
    16         strcat(s, s2);
    17         strcpy(s4, s);
    18         int t;
    19         for(t = 0; strcmp(s, s3); t++)
    20         {
    21             for(int j = 0; j < m; j++)
    22             {
    23                 s1[j] = s[j];
    24                 s2[j] = s[j+m];
    25             }
    26             int i, j;
    27             for(i = 0, j = 0; i < m; i++, j+=2)
    28             {
    29                 s[j] = s2[i];
    30                 s[j+1] = s1[i];
    31             }
    32             if(strcmp(s4, s) == 0)
    33             {
    34                 t = -1;
    35                 break;
    36             }
    37         }
    38         printf("%d
    ", t);
    39     }
    40 }
    41 
    42 int main(void)
    43 {
    44     //freopen("data.in", "r", stdin);
    45     Solve();
    46 
    47     return 0;
    48 }
    Shuffle'm Up
  • 相关阅读:
    shell脚本
    正则表达式和文本处理工具二
    正则表达式和文本处理工具
    Linux基础实操六
    Linux基础实操五
    caffe 试运行MNIST
    转 Windows+VS2013爆详细Caffe编译安装教程
    python一
    VS2008 C++ 调用MATLAB 2009b 生成的DLL .
    MFC抓网页
  • 原文地址:https://www.cnblogs.com/Silence-AC/p/3491338.html
Copyright © 2011-2022 走看看