程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> POJ 3087 Shuffle'm Up 模擬,看著不像搜索啊,poj3087

POJ 3087 Shuffle'm Up 模擬,看著不像搜索啊,poj3087

編輯:C++入門知識

POJ 3087 Shuffle'm Up 模擬,看著不像搜索啊,poj3087


題意:給定s1,s1兩副撲克,順序從下到上。依次將s2,s1的撲克一張一張混合。例如s1,ABC; s2,DEF. 則第一次混合後為DAEBFC. 然後令前半段為s1, 後半段為s2. 如果可以變換成所給出的字符串,輸出變換次數即可;否則,輸出-1。

這題數據太水了,我是這樣判斷無法變換成題目所給出的字符串的:將每一次變換後的字符串存進數組,每次變換後由於之前變換後的字符串相比較,如果有相同的,就說明會無限循環下去。這樣一來,循環次數會增加很多,然而0ms過了。。。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

char ss[1000][200];
int main()
{
    //freopen("in.txt","r",stdin);
    int n;
    scanf("%d",&n);
    int t=1;
    while(n--)
    {
        int m;
        bool flag=false;
        char s1[200],s2[200],s[400];
        memset(s1,0,sizeof(s1));
        memset(s2,0,sizeof(s2));
        memset(s,0,sizeof(s));
        memset(ss,0,sizeof(ss));
        scanf("%d%s%s%s",&m,s1,s2,s);
        for(int i=0;; i++)
        {
            for(int j=0; j<m; j++)
                ss[i][2*j]=s2[j];
            for(int j=0; j<m; j++)
                ss[i][2*j+1]=s1[j];
            if(strcmp(s,ss[i])==0)
            {
                printf("%d %d\n",t,i+1);
                break;
            }
            else
            {
                for(int j=0; j<i; j++)
                    if(strcmp(ss[i],ss[j])==0)
                    {
                        printf("%d -1\n",t);
                        flag=true;
                        break;
                    }
                if(flag)
                    break;
            }
            for(int j=0; j<m; j++)
            {
                s1[j]=ss[i][j];
                s2[j]=ss[i][j+m];
            }
        }
        t++;
    }
    return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved