题意:已知两堆木片s1和s2的初始状态,其木片数均为c,按给定规则能将他们相互交叉组合成一堆木片s12,再将s12的最底下的c块木片归为s1,最顶的c块木片归为s2,依此循环下去。问经过多少次新的组合之后,s12的状态和目标状态des相同,若永远不可能相同,则输出"-1"。
思路:这道题本来就是一道简单的基础的模拟题,真不知道那个孙子在网上第一次就说这是道搜索题,害人不浅,有时候发现网上很多资料都需要自己深层次的进行判断,不能全信!!这道题导致我在BFS上想了N久,最后模拟题水过。
模拟代码如下:
#include<iostream>
using namespace std;
int main()
{
int n, c;
char s1[105], s2[105], s12[210], des[210];
cin >> n;
for(int t = 1; t <= n; t ++)
{
cin >> c >> s1 >> s2 >> des;
int ans = 0;
bool flag = false;
char str1[105];
strcpy(str1, s1); // str1保存原始状态的s1。
while(!flag)
{
int i, k = 0;
for(i = 0; i < c; i ++)
{ // s1和s2按规则合成s12。
s12[k ++] = s2[i];
s12[k ++] = s1[i];
}
s12[k] = 0;
ans ++;
if(!strcmp(s12, des))
{ // 若s12与目标相同。
flag = true;
break;
}
for(i = 0, k = 0; k < c; k ++) // 新的s1。
s1[i ++] = s12[k];
s1[i] = 0;
for(i = 0, k = c; k < 2 * c; k ++) // 新的s2。
s2[i ++] = s12[k];
s2[i] = 0;
if(!strcmp(s1, str1)) // 等到s1经过x次变换后回到str1,则说明不可能到达目标情况了。
break;
}
if(flag) cout << t << ' ' << ans << endl;
else cout << t << " -1" << endl;
}
return 0;
}
这道题算是搜索编外的一个小插曲吧,关于搜索的问题还需要去讨论,接下来依然会进行自己的搜索问题的研究!!
分享到:
相关推荐
而"POJ3087-Shuffle'm Up.doc"可能是解题报告的文档形式,详细解释了解题过程和代码实现。 总的来说,通过这个题目,学习者可以深入理解随机算法和概率在编程中的应用,同时提高对C++编程语言的掌握,尤其是对...
#include #include #include #include #include using namespace std; #define MAX_N 200+10 map, bool >str; char s1[MAX_N],s2[MAX_N],s12[MAX_N],s[MAX_N]; void add( int n ){ int i;...}
【北大POJ初级-简单搜索】是北京大学在线判题系统POJ(Problem Online Judge)针对初学者设置的一类编程题目,主要涉及基础的算法和数据结构应用。这类问题通常不会过于复杂,旨在帮助学习者掌握基本的编程思维和...
* 广度优先搜索:广度优先搜索是指解决问题的广度优先搜索算法,如 poj3278、poj1426、poj3126、poj3087、poj3414。 * 简单搜索技巧和剪枝:简单搜索技巧和剪枝是指解决问题的简单搜索技巧和剪枝算法,如 poj2531、...
【标题】:“西工大poj习题” 这个标题指的是来自西安工业大学(Xi'an Jiaotong University,简称“西工大”)的POJ(Problem Oriented Judgment)在线编程练习平台上的习题集合。POJ是一个面向大学生的在线编程...
poj题目,需要可以下载,虽然没有包含所有的题目,但是对初级入门有帮助
《POJ题目及答案》是面向ACM竞赛爱好者和编程学习者的重要资源,它包含了大量编程题目和对应的解答,旨在帮助提升算法理解与编程技能。POJ(Programming Online Judge)是一个在线的编程评测系统,它提供了丰富的...
【北大POJ水题-整合包】是一个针对北京大学(Peking University)在线判题系统POJ(Peking University Online Judge)中的基础题目所整理的资源集合。这个整合包包含了对这些"水题"的解题报告和已经通过验证...
poj2009离线题库 poj2009离线题库
poj训练 c语言poj训练 西工大 poj 100题。
根据题目要求,以下是从“poj推荐50题”中提炼出的相关知识点: ### 第一类:动态规划 #### 重要性: 动态规划是算法学习中的重要组成部分,它可以帮助解决许多复杂的问题,通过将问题分解为更小的子问题来求解。 ...
《西工大新版POJ100题合集》是一个针对西北工业大学计算机科学与技术专业学生的编程练习资源,包含了100个不同难度级别的题目源代码。这些题目源自POJ(Problem Online Judge)在线编程评测系统,是学习C语言编程和...
【标题】"poj 130题 acm pku" 涉及的是ACM(国际大学生程序设计竞赛)中的PKU(北京大学)在线判题系统POJ(Problem Online Judge)的相关题目。ACM/ICPC(International Collegiate Programming Contest)是全球...
总的来说,POJ第1861题是一道关于最小生成树的问题,要求参赛者运用图论知识和算法技巧编写程序,解决一个实际的计算问题。通过深入理解最小生成树的理论,熟练掌握Prim和Kruskal算法,以及熟悉编程语言的实现细节,...
简单搜索题 数独 答案 POJ 2676 也可以没事玩玩数独。
在编程竞赛的世界里,POJ(Problem Set of Peking University)是北京大学主办的一个在线编程平台,它为参赛者提供了丰富的算法题目,以锻炼和提升编程及算法能力。本解题报告针对的是POJ平台上的100道经典题目,...
【标题】"POJ3717题的代码"涉及的是一个编程竞赛中的问题,POJ(Problem Set of Peking University)是北京大学主办的一个在线编程练习平台,它提供了许多算法题目供参赛者解决。这个标题表明我们要讨论的是针对POJ...
* 广度优先搜索:例如 poj3278、poj1426、poj3126、poj3087、poj3414。 * 简单搜索技巧和剪枝:例如 poj2531、poj1416、poj2676、poj1129。 5. 动态规划: * 背包问题:例如 poj1837、poj1276。 * 类型 DP:...
标题中的“poj acm300题 c++源码打包”表明这是一份包含300个在POJ(编程在线判题系统)上已通过的ACM竞赛题目解决方案的压缩文件,语言为C++。ACM,即国际大学生程序设计竞赛(International Collegiate ...