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 (简单递归)

原文地址:https://www.cnblogs.com/Tianwell/p/11259069.html

时间: 2024-10-14 10:59:34

POJ - 3087 Shuffle'm Up (简单递归)的相关文章

(简单) POJ 3087 Shuffle&#39;m Up,枚举。

Description A common pastime for poker players at a poker table is to shuffle stacks of chips. Shuffling chips is performed by starting with two stacks of poker chips, S1 and S2, each stack containing C chips. Each stack may contain chips of several

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

题意   给两堆牌s1,s2交给你洗 每堆有c张  每次洗牌得到s12  其中s2的最下面一张在s12的最下面一张然后按顺序一张s1一张s2  洗好之后可以把s12下面的c张做s1   上面的c张做s2  求多少次洗牌之后可以得到输入给你的串s  不能得到输出-1 简单模拟  s1+s2!=s就一直洗牌   如果回到初始状态都没得到s就不会得到s了   得到s就可以输出洗牌次数了 #include<iostream> #include<string> using namespace

POJ 3087 Shuffle&#39;m Up (DFS)

题目链接:Shuffle'm Up 题意:有a和b两个长度为n的字符序列,现定义操作: 将a.b的字符交叉合并到一个序列c,再将c最上面的n个归为a,最下面n个归为b 给出a,b和目标序列c,问最少多少次操作a.b转化为c 解析:将a.b放入哈希表,然后模拟操作过程直接dfs即可. AC代码: #include <cstdio> #include <iostream> #include <cstring> #include <map> using names

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

Description A common pastime for poker players at a poker table is to shuffle stacks of chips. Shuffling chips is performed by starting with two stacks of poker chips, S1 and S2, each stack containing C chips. Each stack may contain chips of several

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

题目链接:http://poj.org/problem?id=3087 题目大意:已知两堆牌s1和s2的初始状态, 其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块牌归为s1,最顶的c块牌归为s2,依此循环下去. 现在输入s1和s2的初始状态 以及 预想的最终状态s12.问s1 s2经过多少次洗牌之后,最终能达到状态s12,若永远不可能相同,则输出"-1". 解题思路:照着模拟就好了,只是判断是否永远不能达到状态s12需要用map,定义map<

[暴力搜索] POJ 3087 Shuffle&#39;m Up

Shuffle'm Up Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10003   Accepted: 4631 Description A common pastime for poker players at a poker table is to shuffle stacks of chips. Shuffling chips is performed by starting with two stacks o

模拟/poj 3087 Shuffle&#39;m Up

1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 char s1[110],s2[110],ss[220]; 5 int len,n; 6 7 int f() 8 { 9 int ans=0; 10 char t1[110],t2[110],tt[220]; 11 strcpy(t1,s1);strcpy(t2,s2); 12 while (1) 13 { 14 ans++; 15 for (int i=

POJ 3087 Shuffle&#39;m Up

POJ 3087 Shuffle'm Up Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8843   Accepted: 4078 Description A common pastime for poker players at a poker table is to shuffle stacks of chips. Shuffling chips is performed by starting with two

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

Shuffle'm Up Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5850   Accepted: 2744 Description A common pastime for poker players at a poker table is to shuffle stacks of chips. Shuffling chips is performed by starting with two stacks of