POJ3087 Shuffle'm Up(模拟)

题目链接

AC代码如下;

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string>
#include <queue>
#include <algorithm>
#include <map>
#include <ctype.h>
#include <set>

using namespace std;

const int maxn = 1000+10;

int main() {
    int T, n, cn; bool flag;
    char s1[maxn], s2[maxn], s3[maxn], s[maxn];
    
    scanf("%d", &T);

    for(int kase=1; kase<=T; kase++) {
      set<string> st;
      
      cn = 0; flag = true;
    
      scanf("%d", &n);

      scanf("%s%s%s", s1, s2, s3);
    
      while(true) {
          cn++;
          for(int i=0; i<n; i++) {
            s[2*i] = s2[i];
            s[2*i+1] = s1[i];
         } 
    s[
2*n] = '';    if(strcmp(s, s3) == 0) {      break;    }    if(st.count(s) != 0) {      flag = false;      break;    }    st.insert(s);    for(int i=0; i<n; i++) {      s1[i] = s[i];   }    for(int i=n; i<2*n; i++) {      s2[i-n] = s[i];   }   s1[n] = s2[n] = '';    }    printf("%d ", kase);    if(flag) printf("%d ", cn);    else printf("-1 "); } return 0; }
原文地址:https://www.cnblogs.com/tanhehe/p/3271984.html