zoukankan      html  css  js  c++  java
  • POJ

    题目链接:http://poj.org/problem?id=3087

    Sample Input
    
    2
    4
    AHAH
    HAHA
    HHAAAAHH
    3
    CDE
    CDE
    EEDDCC
    Sample Output
    
    1 2
    2 -1

    分析:

    是一个洗牌游戏,首先给出两堆牌,s1,s2,先从s1上面拿一张牌再从s2上面拿一张牌依次往下可以洗好牌,然后把洗好的牌再分成两堆继续洗,直到这堆牌的顺序与给的顺序相同可以停止,当然如果洗不出给出来的顺序也可以停止
     
    看这题首先没有什么特别好的想法,先暴力一下试试吧。。。然后,其实就是一个模拟题
     
     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<math.h>
     4 #include<queue>
     5 #include<algorithm>
     6 #include<time.h>
     7 using namespace std;
     8 
     9 const int maxn = 2005;
    10 const int N=1207;
    11 
    12 char a[N],e[N],s1[N],s2[N],s[N];
    13 
    14 int Find(char s1[],char s2[],char s[],int n,int k)
    15 {
    16     int j=0,i;
    17     for(i=0;i<n;i++)
    18     {
    19         a[j++]=s2[i];
    20         a[j++]=s1[i];
    21     }
    22     if(strcmp(a,s)==0)
    23         return k;
    24 
    25     if(k==1)
    26         strcpy(e,a);
    27     if(k != 1&&strcmp(e,a)==0)
    28         return -1;
    29 
    30     strncpy(s1,a,n);
    31     strncpy(s2,a+n,n);
    32 
    33     return Find(s1,s2,s,n,k+1);
    34 }
    35 
    36 int main()
    37 {
    38     int T,t,n;
    39 
    40     scanf("%d", &T);
    41     t=1;
    42 
    43     while(T--)
    44     {
    45 
    46 
    47         scanf("%d %s %s %s", &n,s1,s2,s);
    48 
    49         memset(a,0,sizeof(a));
    50 
    51         int ans=Find(s1,s2,s,n,1);
    52 
    53         printf("%d %d
    ",t++,ans);
    54     }
    55 
    56     return 0;
    57 }
     
  • 相关阅读:
    Sum of a Function(区间筛)
    (01背包)输出方案数
    删边求概率
    完全背包输出方案数(dp)
    二分
    Just Arrange the Icons(模拟)
    Balls of Buma(回文串)
    dp思想
    刷题-力扣-190. 颠倒二进制位
    刷题-力扣-173. 二叉搜索树迭代器
  • 原文地址:https://www.cnblogs.com/weiyuan/p/5710283.html
Copyright © 2011-2022 走看看