hdoj 1997 汉诺塔VII 《递归》
来源:互联网 发布:趣头条提现是骗局 知乎 编辑:程序博客网 时间:2024/05/01 01:15
汉诺塔VII
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1520 Accepted Submission(s): 996
Problem Description
n个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列。由于发生错移产生的系列就增加了,这种错误是放错了柱子,并不会把大盘放到小盘上,即各柱子从下往上的大小仍保持如下关系 :
n=m+p+q
a1>a2>...>am
b1>b2>...>bp
c1>c2>...>cq
ai是A柱上的盘的盘号系列,bi是B柱上的盘的盘号系列, ci是C柱上的盘的盘号系列,最初目标是将A柱上的n个盘子移到C盘. 给出1个系列,判断它是否是在正确的移动中产生的系列.
例1:n=3
3
2
1
是正确的
例2:n=3
3
1
2
是不正确的。
注:对于例2如果目标是将A柱上的n个盘子移到B盘. 则是正确的.
n=m+p+q
a1>a2>...>am
b1>b2>...>bp
c1>c2>...>cq
ai是A柱上的盘的盘号系列,bi是B柱上的盘的盘号系列, ci是C柱上的盘的盘号系列,最初目标是将A柱上的n个盘子移到C盘. 给出1个系列,判断它是否是在正确的移动中产生的系列.
例1:n=3
3
2
1
是正确的
例2:n=3
3
1
2
是不正确的。
注:对于例2如果目标是将A柱上的n个盘子移到B盘. 则是正确的.
Input
包含多组数据,首先输入T,表示有T组数据.每组数据4行,第1行N是盘子的数目N<=64.
后3行如下
m a1 a2 ...am
p b1 b2 ...bp
q c1 c2 ...cq
N=m+p+q,0<=m<=N,0<=p<=N,0<=q<=N,
后3行如下
m a1 a2 ...am
p b1 b2 ...bp
q c1 c2 ...cq
N=m+p+q,0<=m<=N,0<=p<=N,0<=q<=N,
Output
对于每组数据,判断它是否是在正确的移动中产生的系列.正确输出true,否则false
Sample Input
631 31 21 131 31 11 263 6 5 41 12 3 263 6 5 42 3 21 131 31 21 1202 20 172 19 1816 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Sample Output
truefalsefalsefalsetruetrue
Author
Zhousc@ECJTU
汉诺塔每次没有放好的n个盘子都会专注与前n-1个盘子在一处,然后让第n个先完成。
在将 n 从 A (kai) 放到C(jie)上的这个过程开始,n-1不能在C上。
在将 n 从 A (kai ) 放到C(jie)上的这个过程刚结束,n-1一定不在A上。
即n移动的过程中,n-1不在(kai)和(jie)处,在(zhong)的位置。
当n移动结束以后,【1,n-2】会到n(kai)的位置,n-1 到 n ( jie )的位置。
即第n-1个盘子的位置可以和第n个的位置一样(n-1完成移动),或者出现在一个与n到指定地前后不一样的位置(n移动中);
代码:
#include<cstdio>int ss[100];int main(){ int t;scanf("%d",&t); while (t--) { int n,a,pp;scanf("%d",&n); scanf("%d",&pp); for (int i=0;i<pp;i++) { scanf("%d",&a); ss[a]=1; } scanf("%d",&pp); for (int i=0;i<pp;i++) { scanf("%d",&a); ss[a]=2; } scanf("%d",&pp); for (int i=0;i<pp;i++) { scanf("%d",&a); ss[a]=3; } bool fafe=true; int aa=3,bb=1; for (int i=n;i;i--) { if (ss[i]!=aa&&ss[i]!=bb) { fafe=false; break; } if (ss[i]==aa) { bb=6-aa-bb; } else { aa=6-aa-bb; } } if (fafe) printf("true\n"); else printf("false\n"); } return 0;}
0 0
- HDOJ 1997 汉诺塔VII 【递归】
- hdoj 1997 汉诺塔VII 《递归》
- HDOJ题目1997汉诺塔VII(递归)
- 汉诺塔VII-hdoj-1997
- HDOJ 1997 汉诺塔VII (递归模拟 or 规律解法)
- hdoj 1997 汉诺塔VII【水】
- hdu 1997 汉诺塔VII(递归)
- HDU 1997 汉诺塔VII(递归)
- HDOJ-----1997汉诺塔VII-----数学思维题
- HDU:1997 汉诺塔VII(规律||递归)
- 【杭电oj】1997 - 汉诺塔VII(递归,思维)
- 杭电 Problem - 1997 汉诺塔VII 【递归&规律】
- hdu1997 汉诺塔VII(DFS递归调用)
- HDU 1997 - 汉诺塔VII
- HDU 1997 汉诺塔VII
- hdu 1997 汉诺塔VII
- hdu 1997 汉诺塔VII
- hdu 1997 汉诺塔VII
- Codeforces 444C DZY Loves Colors
- HDU 5029 Relief grain(恶心的树链剖分 + 线段树)
- 杭电-2098 分拆素数和 (素数打表)
- 29. Divide Two Integers
- Extjs MVC架构
- hdoj 1997 汉诺塔VII 《递归》
- 一天的记录
- VS2013_MFC编程问题
- 一次给新电脑安装pod--ios辅助开发工具 的过程 (转)
- 浅谈fork与vfork函数
- MySQL日期数据类型、时间类型使用总结
- Android NDK系列(1) --- 配置及简单使用
- 0720学习记录(函数)
- 指针和数组的区别