link:http://poj.org/problem?id=3087
题意:给你两串字串(必定偶数长),按照扑克牌那样的洗法(每次从S2堆底中拿第一张,再从S1堆底拿一张放在上面),洗好后的一堆可以把下面的一半作为S1,上面的一半作为S2,问能否洗出题目给出的最终字串。
思路:很好能够找到规律,就是先把两串合并,分别存a[i],a[i+n/2]到新串中,这个新串就是当前洗出的结果。因此进行DFS,由于给出的串长为偶数(?)所以必定能够洗回初始状态,所以出口就是初始串。


/** @Date    : 2016-11-17-22.11* @Author  : Lweleth (SoungEarlf@gmail.com)* @Link    : https://github.com/* @Version :*/
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <utility>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <stack>
#include <queue>
//#include<bits/stdc++.h>
#define LL long long
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std;const int INF = 0x3f3f3f3f;
const int N = 1e5+2000;char a[500];
char b[500];
char c[500];
char t[500];int n;
int ans = 0;
int dfs(char *x, char *y)
{int cnt = 0;for(int i = 0; i < n; i++){x[cnt++] = y[i+n];x[cnt++] = y[i];}x[cnt] = '\0';ans++;if(strcmp(x, b) == 0){//printf("!%s\n", x);return ans;}if(strcmp(x, t) == 0){//printf("~%s\n", x);return -1;}dfs(y, x);
}int main()
{int T;cin >> T;int cnt = 0;while(T--){ans = 0;scanf("%d", &n);scanf("%s", a);scanf("%s", a + n);scanf("%s", b);strcpy(t, a);printf("%d %d\n",++cnt, dfs(c, a));}return 0;
}

转载于:https://www.cnblogs.com/Yumesenya/p/6086770.html

POJ 3087 Shuffle'm Up DFS相关推荐

  1. 【POJ3126 Prime Path】【POJ 3087 Shuffle'm Up】【UVA 11624 Fire!】【POJ 3984 迷宫问题】

    POJ3126Prime Path 给定两个四位素数a  b,要求把a变换到b 变换的过程要 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数  与  前一步得到的素数  只能有一个位 ...

  2. POJ 3087 Shuffle'm Up 线性同余,暴力 难度:2

    http://poj.org/problem?id=3087 设:s1={A1,A2,A3,...Ac} s2={Ac+1,Ac+2,Ac+3,....A2c} 则 合在一起成为 Ac+1,A1,Ac ...

  3. POJ 3087 Shuffle'm Up (模拟+map)

    题目链接:http://poj.org/problem?id=3087 题目大意:已知两堆牌s1和s2的初始状态, 其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块 ...

  4. POJ 3087 Shuffle'm Up(水题)

    题目链接 蒙姐跟我说了题意,就很简单了,类似打扑克中的插牌.磕磕绊绊,终于把POJ第三次训练刷完了. 1 #include <cstdio> 2 #include <cstring& ...

  5. poj 3087 Shuffle'm Up 模拟(map记录)

    题意:已知两堆牌数均为n的纸牌堆a和b的初始状态, 按给定规则能将他们相互交叉组合成一堆牌str,再将str的最底下的n张牌归为a,最顶的n张牌归为b,依此循环下去.现在输入a和b的初始状态 以及 预 ...

  6. G - Shuffle‘m Up POJ - 3087

    G - Shuffle'm Up POJ - 3087 题意:洗牌,每次让两副牌依次合为一摞,每次s2的最后一张垫底,拆为两摞,下面一半为 s1,反复操作至出现目标情况,输出洗牌次数,如果出现重复,输 ...

  7. pku 3087 Shuffle'm Up 说的是bfs,其实就是个模拟

    http://poj.org/problem?id=3087 刚看到题目的时候给我整蒙了,BFS怎么做啊?这不就是模拟一下洗牌的过程,如果遇到目标字符串就输出步数,如果回到原始串,就说明到不了目标串. ...

  8. poj 1321 棋盘问题(dfs)

    题目:http://poj.org/problem?id=1321 没什么难度,比较水... View Code 1 #include <iostream> 2 #include<c ...

  9. POJ 2676/2918 数独(dfs)

    思路:记录每行每列每一个宫已经出现的数字就可以.数据比較弱 另外POJ 3074 3076 必须用剪枝策略.但实现较麻烦,还是以后学了DLX再来做吧 //Accepted 160K 0MS #incl ...

最新文章

  1. QT 中QTimer 和 startTimer()的区别
  2. 现代谱估计:MTM 谐波分析
  3. SpringSecurity分布式整合之认证模块搭建
  4. eos操作系统_EOS相机统一的用户界面
  5. html表单的首要标记是form,关于html中表单form标记的介绍
  6. 三方协议接收节点不存在_【花开法务】没有保密协议是否意味着员工不存在保密义务?...
  7. 数据库连接池的深入理解
  8. Windows11 配置 java 8.0 环境变量
  9. 机器人教室外墙_智慧教室解决方案-机器人创客教室布局设计
  10. 小米笔记本 镜像_小米笔记本Air 13.3原装WIN10出厂系统ISO镜像1607原版镜像下载
  11. [UE4]风格化渲染
  12. 2010中国移动开发者大会21日开幕 揭密五大亮
  13. Dubbo扩展点注解之@Adaptive
  14. linux bin目录下存放的什么,Linux_Linux根目录下主要目录功能说明,/bin:存放最常用命令;   /b - phpStudy...
  15. c语言清除文件缓存区,C语言之清空缓存区
  16. (AAAI-2019)用于行人重识别的水平金字塔匹配
  17. Nanopi-NEO点亮SPI-TFT
  18. 程序实现启用/禁用设备(驱动)enable/disable device with windows api
  19. 解决LinuxRedhat网卡配置MAC地址冲突问题
  20. formatDate

热门文章

  1. Head First JSP---随笔三
  2. 【C/C++多线程编程之九】pthread读写锁
  3. 最短路径:Dijkstra算法和Floyd算法
  4. STM32开发 -- 数据搜索
  5. 你眼泪的味道,我知道!
  6. 硬中断、软中断和信号
  7. C++/java/python 创建二维数组
  8. Android 5.0 Usb调试拦截分析及修改
  9. Android Studio使用Gradle上传AAR至Maven
  10. Android Telephony分析(三) ---- RILJ详解