zoukankan      html  css  js  c++  java
  • Shuffle'm Up

    poj3087:http://poj.org/problem?id=3087

    题意:题意简化之后的就是:给你两个长度均为c的字符串s1,s2,然后给你一个2*c的串ss,现在每次从s2,中取一个,然后再从s1,取出一个(都是从左往右),组成新的串,如果新的的串和ss相同,则说明s1,s2可以通过若干次洗牌,组成ss。现在就是来求这个步数,若存在,则输出,否则输出-1.
    题解:直接模拟。但是要注意一个问题。就是strcmp(s1,s2)s1,s2后面要加‘’,我就是没有注意这个问题结果贡献了4wa。

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<algorithm>
     5 #include<map>
     6 #include<string>
     7 using namespace std;
     8 char s1[102],s2[102],aim[202],temp[202];
     9 int c;
    10 int main(){
    11     int t;
    12     scanf("%d",&t);
    13      for(int cas=1;cas<=t;cas++){
    14          map<string,int>Q;
    15         scanf("%d",&c);
    16         scanf("%s",s1);
    17         scanf("%s",s2);
    18         scanf("%s",aim);
    19         int counts=0;
    20         Q[aim]=1;bool flag=true;
    21        while(true){
    22           for(int i=0;i<=2*c-1;i+=2)
    23             temp[i]=s2[i/2];
    24           for(int i=1;i<=2*c-1;i+=2)
    25             temp[i]=s1[i/2];
    26             counts++;
    27             temp[2*c]='';
    28           if(strcmp(temp,aim)==0)break;
    29           if(Q[temp]){
    30             flag=false;
    31             break;
    32           }
    33           Q[temp]=1;
    34           for(int i=0;i<c;i++)
    35             s1[i]=temp[i];
    36           for(int j=c;j<=2*c-1;j++)
    37              s2[j-c]=temp[j];
    38        }
    39        if(flag)printf("%d %d
    ",cas,counts);
    40        else printf("%d -1
    ",cas);
    41      }
    42 }
    View Code
  • 相关阅读:
    排序算法
    顺序表与链表
    二叉树
    查找算法
    15 Django 离线脚本
    poj 1330 Nearest Common Ancestors(LCA 基于二分搜索+st&rmq的LCA)
    hdu 6158 The Designer( 反演圆)
    圆的反演性质
    HDU 6153 A Secret(扩展kmp)
    kmp&扩展kmp
  • 原文地址:https://www.cnblogs.com/chujian123/p/3536827.html
Copyright © 2011-2022 走看看