题意:

3根柱子的汉诺塔模型。给定每根柱上当前时刻有几个圆盘,判断这个时刻是否会出现在汉诺塔模拟过程中,如果不会,输出"NO"。否则输出当前状态离终态还有多少步。

思路:

我们先回顾一下普通汉诺塔的模拟过程。

void dfs(int n,int a,int b,int c)    //第n个圆盘从a->c
{if(n == 1){printf("%d, %d->%d\n",n,a,c);return;}dfs(n-1,a,c,b);printf("%d, %d->%d\n",n,a,c);dfs(n-1,b,a,c);
}

我们可以发现模拟过程中的几步。首先是n-1从a->b,然后n从a->c,然后n-1从b->c。因此我们可以根据第n个圆盘所在的位置,判断当前状态处于哪一个步骤。然后再判断n-1个圆盘所处的位置,不断递归下去。这里需要知道,n个圆盘的汉诺塔,一共需要移动2^n-1步,F[n] = 2*F[n-1]+1,因此我们可以根据每个盘的状态,对当前步数区间进行缩小,最终可以求出结果答案。详情看代码。

代码:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define rep(i,a,b) for(int i = a; i <= b; i++)
#define LOG1(x1,x2) cout << x1 << ": " << x2 << endl;
#define LOG2(x1,x2,y1,y2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << endl;
typedef long long ll;
typedef double db;
const db EPS = 1e-9;
using namespace std;
const int N = 70;int num[N],n,flag;
ll ans;// void dfs(int n,int a,int b,int c) //a->c
// {
//  if(n == 1){
//      printf("%d, %d->%d\n",n,a,c);
//      return;
//  }
//  dfs(n-1,a,c,b);
//  printf("%d, %d->%d\n",n,a,c);
//  dfs(n-1,b,a,c);
// }ll dfs(int n,ll l,ll r,int a,int b,int c)
{if(num[n] == a){r = (r-l-1)/2+l;if(n == 1) return l;if(num[n-1] == b) return dfs(n-1,l,r,a,c,b);else if(num[n-1] == a) return dfs(n-1,l,r,a,c,b);else{flag = -1;return 0;}} else if(num[n] == c){l = (r-l-1)/2+l+1;if(n == 1) return l;if(num[n-1] == b) return dfs(n-1,l,r,b,a,c);else if(num[n-1] == c) return dfs(n-1,l,r,b,a,c);else{flag = -1;return 0;}}else{flag = -1;return 0;}
}int main()
{flag = 0;ll base = 1;rep(i,0,2){int xx; scanf("%d",&xx); n += xx;rep(j,1,xx){int yy; scanf("%d",&yy);num[yy] = i;}}// rep(i,1,n) printf("num[%d]:%d\n",i,num[i]);rep(i,1,n) base *= 2;base--;int jud = 0;ans = dfs(n,0,base,0,1,2);if(jud) printf("No\n");else{if(flag == -1) printf("No\n");else{printf("%lld\n",base-ans);}}return 0;
}/*
5 5 4 3 2 1
0
0
*/

【2016-2017 ACM-ICPC (ECNA 2016) G】That's one Hanoi-ed Teacher【汉诺塔问题】相关推荐

  1. 2017 ACM ICPC Asia Regional - Daejeon

    2017 ACM ICPC Asia Regional - Daejeon Problem A Broadcast Stations 题目描述:给出一棵树,每一个点有一个辐射距离\(p_i\)(待确定 ...

  2. ACM ICPC China final G Pandaria

    目录 ACM ICPC China final G Pandaria ACM ICPC China final G Pandaria 题意:给一张\(n\)个点\(m\)条边的无向图,\(c[i]\) ...

  3. 2016 年 ACM/ICPC 青岛区域赛 Problem C Pocky

    昨晚乱入学弟的训练赛,想了一下这个题.推导的过程中,加深了对公理化的概率论理解.$\newcommand{\d}{\mathop{}\!\mathrm{d}}$ 解法一 考虑 $ d < L$ ...

  4. 2017 ACM/ICPC 南宁赛区小结 By JSB @ Reconquista

    Statistics TYPE: Onsite Contest NAME: 2017 - ICPC - Asia Nanning PLAT: pc^2 TIME: 2017/11/26 09:00-1 ...

  5. 2017 ACM ICPC Asia Shenyang Regional Contest 题解(10 / 13)【每日亿题2 / 16】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A.(2017 ICPC shenyang I)Little Boxes B.(2017 ICP ...

  6. 2017 ACM/ICPC 北京赛区小结 By jsb @Reconquista

    Statistics TYPE: Onsite Contest NAME: 2017 - ICPC - Asia Beijing PLAT: hihoCoder TIME: 2017/11/19 09 ...

  7. 2017 ACM/ICPC(西安)赛后总结

    早上8:00的高铁,所以不得不6点前起床,向火车站赶--到达西安后已经是中午,西工大距离西安北站大概3小时车程的距离,只好先解决午饭再赶路了--下午3.30的热身赛,一行人在3.35左右赶到了赛场,坐 ...

  8. [Contest]2017 ACM/ICPC Asia Regional Shenyang Online(01 03 07 09 10 11待补)

    1001 string string string 题意 给定一个字符串$s$,求其中出现$k$次的子串的个数. 题解 后缀自动机. 代码 1002 cable cable cable 题意 给定$M ...

  9. 2017 ACM ICPC Asia Regional - Daejeon Programming Constest

    A: Broadcast Stations 题目大意 给定一棵树,选一些节点iii,赋予P(i)" role="presentation">P(i)P(i)P(i) ...

  10. 2017 ACM/ICPC Asia Regional Shenyang Online array

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=6197 题目大意:给出一个序列,删去k个元素是否能构成不上升序列或不下降子序列 (呃,先凑个数吧 二分+ ...

最新文章

  1. Docker 安装MySQL以及外部访问
  2. 防止入侵者嗅探web密码
  3. 用户画像2种数据存储的方式
  4. 单细胞转录组基本概念(一)
  5. UVA 10129 Play on Words
  6. Wordpress 自定义文章类型添加 Categoried、Tags
  7. 《Python自动化》学习笔记:百度云智能实现提取身份证信息
  8. 电脑电子版文件怎么弄_清空回收站后,如何找回删除的文件?
  9. 关于interface
  10. WLT8016:模组通信调试
  11. JDK 11 是发布了,但收费吗?
  12. 如何去做一个完整的网站SEO优化方案!
  13. \xe8\x83\xa5\xe5\xb8\x85\xe6\x9d\xb0转中文
  14. End-to-end 3D Point Cloud Instance Segmentation without Detection
  15. 3.图灵学院-----阿里/京东/滴滴/美团整理----高频JVM调优篇
  16. 水溶性花青素连接剂1617497-19-4,diSulfo-Cyanine5 alkyne,二磺酸花青素Cy5炔基
  17. 7-34 任务调度的合理性(25 分)
  18. 联想M7400Pro打印满张纸黑
  19. 堡垒机AccessClient插件在mac系统下闪退的解决办法
  20. 如何正确选择集体渲染(云渲染)和gpu离线渲染

热门文章

  1. ubuntu软件包管理
  2. Nagios 监控温度感应器
  3. http服务器和application服务器区别
  4. 经典排序之 归并排序
  5. linux运行级别0-6的各自含义(考试题答案系列)
  6. js统计页面访问次数
  7. 双重控制门锁程序_智能化发展趋势下,智能门锁如何获得市场青睐?
  8. 温故知新----表单
  9. A[1054] The Dominant Colour (map!!)
  10. c++ sort 从大到小排序_常用排序算法速度比较