题目链接:Shuffle'm Up

除了英文题有点恶心。发现模拟 + bfs 就可以过的时候,就是水了。

一个bug 就是filp函数得到string s12失败了。恩。据大腿告知,string 并不指定字符串的初始化长度是0,也就是说我每个元素的赋值是没有意义的。或者。string 是引用型数据类型,所以名字是一个指针吧。然后str.resize()函数愉快的解决了这个问题。

还有就是对题意。字符串从左到右是从下到上。我是懵了一下的。

题意思路见代码吧。

 /*
题目很长。也没有看。百度到题意。给出两个长度相同的牌。洗牌方式见图得到s12。然后以最下面的相应长度为s1,上面的为s2,然后,重新洗牌。
问s12 是否有可能得到s12 和目标牌一样。步数是多少。
开始是没有思路。然后模拟。然后。bfs。把第一个s12当做初始状态,然后开始进队列。用map标记是否出现过
样例:
下 上
AHAH
HAHA
HHAAAAHH AHAH
HAHA
HAAHHAAH HAAH
HAAH
HHAAAAHH
*/ #include <string.h>
#include <iostream>
#include <queue>
#include <map>
#include <string>
#define maxn 1000000
using namespace std; queue<string>que;
map<string, int>mp;
string s1, s2, s12;
string temp, now; int ans;
int len; void filp(string s1, string s2) {
string tempans;
//cout << "======\n";
for (int i=, j=; i<len; i++, j+=) {
temp[j] = s2[i];
}
//cout << "------\n";
for (int i=, j=; i<len; i++, j+=) {
temp[j] = s1[i];
}
temp[*len] = '\0';
} void dfs() {
while(!que.empty()) {
now = que.front();
que.pop();
// cout << now << "====" << endl;
if (now == s12) {
ans = mp[now];
return;
}
for (int i=; i<len; ++i) {
s1[i] = now[i];
}
for (int i=; i<len; ++i) {
s2[i] = now[i+len];
}
filp(s1, s2);
if (!mp[temp]) {
que.push(temp);
mp[temp] = mp[now] + ;
}
}
return;
} int main() {
int t;
cin >> t;
int cnt = ;
while(t--) {
mp.clear();
ans = maxn;
cin >> len >> s1 >> s2 >> s12;
temp.resize(*len);
filp(s1, s2); mp[temp]++;
while(!que.empty()) {
que.pop();
}
que.push(temp);
dfs();
if (ans == maxn) {
cout << ++cnt << " " << - << endl;
}
else cout << ++cnt << " " << ans << endl;
dfs();
}
return ;
}

POJ 3087 Shuffle'm Up bfs的更多相关文章

  1. POJ.3087 Shuffle'm Up (模拟)

    POJ.3087 Shuffle'm Up (模拟) 题意分析 给定两个长度为len的字符串s1和s2, 接着给出一个长度为len*2的字符串s12. 将字符串s1和s2通过一定的变换变成s12,找到 ...

  2. POJ 3087 Shuffle'm Up(洗牌)

    POJ 3087 Shuffle'm Up(洗牌) Time Limit: 1000MS    Memory Limit: 65536K Description - 题目描述 A common pas ...

  3. DFS POJ 3087 Shuffle'm Up

    题目传送门 /* 题意:两块扑克牌按照顺序叠起来后,把下半部分给第一块,上半部给第二块,一直持续下去,直到叠成指定的样子 DFS:直接模拟搜索,用map记录该字符串是否被搜过.读懂题目是关键. */ ...

  4. POJ 3087 Shuffle'm Up

    Shuffle'm Up Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit ...

  5. 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 ...

  6. poj 3087 Shuffle'm Up ( map 模拟 )

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

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

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

  8. POJ 3087 Shuffle'm Up DFS

    link:http://poj.org/problem?id=3087 题意:给你两串字串(必定偶数长),按照扑克牌那样的洗法(每次从S2堆底中拿第一张,再从S1堆底拿一张放在上面),洗好后的一堆可以 ...

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

    Shuffle'm Up Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10003   Accepted: 4631 Des ...

随机推荐

  1. OpenPGP协议的一个JavaScript实现:OpenPGP.js

    OpenPGP.js 是OpenPGP协议的一个Javascript实现. 基于 JavaScript的OpenPGP实现方便用户可以直接在浏览器中加密和解密Web邮件,不需要专门的邮件客户端.

  2. installEventFilter可以安装到任何QObject的子类,并不仅仅是UI组件。事件过滤器和安装过滤器的组件必须在同一线程,在它们分属在不同线程时,事件过滤器也是不起作用的

    Qt的事件知识点: ①事件对象创建完毕后,Qt 将这个事件对象传递给 QObject 的 event() 函数.event() 函数并不直接处理事件,而是将这些事件对象按照它们不同的类型,分发给不同的 ...

  3. Scala简介及基础语法

    一.scala简介 官网:https://www.scala-lang.org/ Scala语言很强大,集成了面向对象和函数式编程的特点. 运行在JVM(jdk). 大数据中为什么学习scala? s ...

  4. centos shell编程5 LANMP一键安装脚本 lamp sed lnmp 变量和字符串比较不能用-eq cat > /usr/local/apache2/htdocs/index.php <<EOF重定向 shell的变量和函数命名不能有横杠 平台可以用arch命令,获取是i686还是x86_64 curl 下载 第三十九节课

    centos shell编程5  LANMP一键安装脚本 lamp  sed  lnmp  变量和字符串比较不能用-eq  cat > /usr/local/apache2/htdocs/ind ...

  5. DataFrames与RDDs的相互转换

    Spark SQL支持两种RDDs转换为DataFrames的方式 使用反射获取RDD内的Schema     当已知类的Schema的时候,使用这种基于反射的方法会让代码更加简洁而且效果也很好. 通 ...

  6. HBase表预分区

    在创建Hbase表的时候默认一张表只有一个region,所有的put操作都会往这一个region中填充数据,当这个一个region过大时就会进行split.如果在创建HBase的时候就进行预分区则会减 ...

  7. HDU2588:GCD(欧拉函数的应用)

    题目链接:传送门 题目需求:Given integers N and M, how many integer X satisfies 1<=X<=N and (X,N)>=M.(2& ...

  8. 3.10 Templates -- Development Helpers

    一.Development Helpers Handlebar和Ember有好多个辅助器可以使模板开发更容易. 这些辅助器输出变量到浏览器的控制台,或者从模板中激活debugger. 二.Loggin ...

  9. HDU 2457 DNA repair(AC自动机+DP)题解

    题意:给你几个模式串,问你主串最少改几个字符能够使主串不包含模式串 思路:从昨天中午开始研究,研究到现在终于看懂了.既然是多模匹配,我们是要用到AC自动机的.我们把主串放到AC自动机上跑,并保证不出现 ...

  10. UVa 1637 纸牌游戏(全概率公式)

    https://vjudge.net/problem/UVA-1637 题意: 36张牌分成9堆,每堆4张牌.每次可以拿走某两堆顶部的牌,但需要点数相同.每种拿法的概率均为1/5.求成功概率. 思路: ...