POJ3087 Shuffle'm Up

Posted veasky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ3087 Shuffle'm Up相关的知识,希望对你有一定的参考价值。

题目:

现有字符串s1、s2、s12,其中s1、s2的长度为len,s12的长度为2*len。

是否可以通过一些操作使s1和s2转换合并成s12?

变换的操作规则如下:

假设s1=11111,s2=00000

变换后的序列 s=0101010101

假设s1=12345,s2=67890

变换后的序列 s=6172839405

如果s和s12完全相同,那么输出变换次数

如果不完全相等,s的前半部分作为s1,后半部分作为s2,重复上述过程

输入:

第一行T(1≤T≤1000),代表有T组数据.

每组数据第一行len(1≤len≤100),第二行长度为len的字符串s1,第三行长度为len的字符串s2,第四行长度为2*len的字符串s12。

输出:

首先输出处理数据组的编号(编号从1开始)

再输出变换次数并换行。

注意两个数字之间有空格。

对于变换次数,如果无需变换直接得到s12,那么输出0,如果无论怎么变换都不会得到s12,那么输出 -1。

样例:

技术图片

分析:简单的模拟,return-1的条件随便给了一个就水过了

#include<iostream>
#include<sstream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<functional>
#include<iomanip>
#include<numeric>
#include<cmath>
#include<queue>
#include<vector>
#include<set>
#include<cctype>
#define PI acos(-1.0)
const int INF = 0x3f3f3f3f;
const int NINF = -INF - 1;
typedef long long ll;
using namespace std;
string a, b, c;
int n;
int func()

    int num = 0;
    string temp;
    temp = a + b;
    //cout << temp << endl;
    while (temp != c)
    
        if (num == 2 * n) return -1;
        a = temp.substr(0, n);
        b = temp.substr(n, n);
        //cout << a << ‘ ‘ << b << endl;
        //break;
        int flag = 0;
        for (int i = 0; i < n; ++i)
            temp[flag++] = b[i], temp[flag++] = a[i];
        num++;
    
    return num;

int main()

    int T, t = 0;
    cin >> T;
    while (T--)
    
        t++;
        cin >> n;
        cin >> a >> b >> c;
        int num = func();
        cout << t <<   << num << endl;
    
    return 0;

 

以上是关于POJ3087 Shuffle'm Up的主要内容,如果未能解决你的问题,请参考以下文章

poj-3087 Shuffle'm Up

POJ 3087Shuffle'm Up

poj3087 Shuffle'm Up(模拟)

[暴力搜索] POJ 3087 Shuffle'm Up

G - Shuffle'm Up POJ - 3087

POJ 3087 Shuffle&#39;m Up(模拟)