POJ - 3087 Shuffle'm Up (简单递归)

Posted tianwell

tags:

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

题意:将两个字符串模拟洗牌的操作合并问是否能得打答案,以及中间经过的次数,如果不能则输出-1

思路:这是一道模拟题,所以只需要写一个模拟操作,不断循环即可。同时还要判断循环结束条件(递归结束条件),如果自己手写一个例子的话就会发现其在不超过2*n(n为长度)次数就会洗回来

 

完整代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
const int maxn = 1e3;
string s1,s2,s12;
int n;
void dfs(int step, string s)
    if(!s.compare(s12))
        cout<<step<<endl;
        return ;
    else if(step>(2*n))
        cout<<-1<<endl;
        return ;
    
    s.clear();
    for(int i=0;i<n;i++)
        s.push_back(s2[i]);
        s.push_back(s1[i]);
    
    s1.assign(s,0,n);
    s2.assign(s,n,n);
    dfs(++step,s);

int main()
    int T;
    cin>>T;
    int cnt =0;
    while(T--)
        cin>>n;
        cin>>s1>>s2>>s12;
        cout<<++cnt<<" ";
        dfs(0,s2);
    
    return 0;

 

以上是关于POJ - 3087 Shuffle'm Up (简单递归)的主要内容,如果未能解决你的问题,请参考以下文章

POJ 3087Shuffle'm Up

poj-3087 Shuffle'm Up

poj3087 Shuffle'm Up(模拟)

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

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

G - Shuffle'm Up POJ - 3087