HDU 汉诺塔VII

简介:

汉诺塔VII

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 203 Accepted Submission(s): 174
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盘. 则是正确的.
 
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,
 
Output

            对于每组数据,判断它是否是在正确的移动中产生的系列.正确输出true,否则false
 
Sample Input
6
3
1 3
1 2
1 1
3
1 3
1 1
1 2
6
3 6 5 4
1 1
2 3 2
6
3 6 5 4
2 3 2
1 1
3
1 3
1 2
1 1
20
2 20 17
2 19 18
16 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
 
Sample Output
true
false
false
false
true
true
 
 
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    int one[4],n[4],h[4][64],a,b,c,N,cas,i,t,flag;
    scanf("%d",&cas);
    while(cas--)
    {
        a = 1;b = 2;c = 3;
        one[a]=one[b]=one[c]=1;
        scanf("%d",&N);
        scanf("%d",&n[a]);
        for(i = one[a];i<=n[a];i++)
        scanf("%d",&h[a][i]);
        scanf("%d",&n[b]);
        for(i = one[b];i<=n[b];i++)
        scanf("%d",&h[b][i]);
        scanf("%d",&n[c]);
        for(i = one[c];i<=n[c];i++)
        scanf("%d",&h[c][i]);
        flag = 1;
        while(true)
        {
            if(n[b]>0&&h[b][one[b]]==N){flag = 0;break;}
            if(n[c]==N||n[a]==N){flag = 1;break;}
            if(n[a]>0&&h[a][one[a]]==N)
            {
                N--;
                n[a]--;
                one[a]++;
                t = b; b = c;c = t;
                continue;
            }
            if(n[c]>0&&h[c][one[c]]==N)
            {
                N--;
                n[c]--;
                one[c]++;
                t = a;a = b;b = t;
                continue;
            }
        }
        if(flag)printf("true\n");
        else printf("false\n");
    }
    return 0;
}










本文转自NewPanderKing51CTO博客,原文链接:http://www.cnblogs.com/newpanderking/archive/2011/07/29/2120984.html ,如需转载请自行联系原作者



相关文章
|
12月前
|
Java 索引
课时52:字符串查找
课时52:字符串查找。本课介绍了Java中String类提供的多种字符串查找方法,如contains、indexOf、lastIndexOf、startsWith和endsWith等。通过这些方法可以判断子字符串是否存在、查找其位置以及验证字符串的开头和结尾。范例展示了如何使用这些方法进行实际操作,强调了它们在开发中的重要性。
188 4
|
存储 监控 算法
Java内存管理深度剖析:从垃圾收集到内存泄漏的全面指南####
本文深入探讨了Java虚拟机(JVM)中的内存管理机制,特别是垃圾收集(GC)的工作原理及其调优策略。不同于传统的摘要概述,本文将通过实际案例分析,揭示内存泄漏的根源与预防措施,为开发者提供实战中的优化建议,旨在帮助读者构建高效、稳定的Java应用。 ####
243 35
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(五十八)(4)
SqlAlchemy 2.0 中文文档(五十八)
186 0
|
Java 程序员 编译器
Java|如何正确地在遍历 List 时删除元素
从源码分析如何正确地在遍历 List 时删除元素。为什么有的写法会导致异常,而另一些不会。
445 3
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:实现过程与关键细节解析an3.021-6232.com
随着互联网技术的快速发展,ASP.NET作为一种广泛使用的服务器端开发技术,其与数据库的交互操作成为了应用开发中的重要环节。本文将详细介绍在ASP.NET中如何连接SQL数据库,包括连接的基本概念、实现步骤、关键代码示例以及常见问题的解决方案。由于篇幅限制,本文不能保证达到完整的2000字,但会确保
|
人工智能 自然语言处理 安全
产品更新|宜搭AI助理、精品应用产品力、专属宜搭多项功能升级!
本期功能更新已全量发布,可直接在宜搭内体验。
846 0
产品更新|宜搭AI助理、精品应用产品力、专属宜搭多项功能升级!
|
数据可视化 数据挖掘 BI
工作流优化秘诀:低代码平台如何缩短项目周期
Zoho Creator是低代码平台,通过可视化组件和预设模板加速应用开发,简化工作流设计。它提供多样化组件、响应式布局、第三方集成,支持实时协作编辑、权限管理及任务跟踪,增强团队合作。自动化工作流功能包括触发器、自定义动作和审批流程自动化,减少手动操作。此外,其数据驱动的智能决策工具如BI集成,助力企业基于数据做决策。Zoho Creator简化了开发流程,提升了项目交付效率,适用于多行业场景。
210 1
|
网络协议 Python
在python中利用TCP协议编写简单网络通信程序,要求服务器端和客户端进行信息互传。 - 蓝易云
在这个示例中,服务器端创建一个socket并监听本地的12345端口。当客户端连接后,服务器发送一条欢迎消息,然后关闭连接。客户端创建一个socket,连接到服务器,接收消息,然后关闭连接。
244 0
|
资源调度 Kubernetes Cloud Native
Spring Cloud 应用在 Kubernetes 上的最佳实践 — 高可用(混沌工程)
从上篇开始,我们进入到了高可用的章节,上篇提到的熔断能力,是历年保障大促当天晚上整个系统不被洪峰流量打垮的法宝,本篇介绍的措施与熔断有不一样的地方?
3269 63
Spring Cloud 应用在 Kubernetes 上的最佳实践 — 高可用(混沌工程)
|
存储 传感器
STM32速成笔记(七)—ADC
本文介绍了ADC的概念,用途,针对STM32的ADC做出了详细介绍,给出了配置步骤,配置程序。通过一个简单的小项目展示了ADC的配置和使用方法。此外,还针对如何利用定时器触发AD转换,如何采集交流信号,如何计算交流信号有效值进行了介绍,并给出了程序设计。
824 0
STM32速成笔记(七)—ADC