bzoj 1019: [SHOI2008]汉诺塔(打表)
来源:互联网 发布:拼豆转图软件手机 编辑:程序博客网 时间:2024/05/01 21:25
1019: [SHOI2008]汉诺塔
Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1770 Solved: 1079
[Submit][Status][Discuss]
Description
汉诺塔由三根柱子(分别用A B C表示)和n个大小互不相同的空心盘子组成。一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一个塔状的锥形体。
对汉诺塔的一次合法的操作是指:从一根柱子的最上层拿一个盘子放到另一根柱子的最上层,同时要保证被移动的盘子一定放在比它更大的盘子上面(如果移动到空柱子上就不需要满足这个要求)。我们可以用两个字母来描述一次操作:第一个字母代表起始柱子,第二个字母代表目标柱子。例如,AB就是把柱子A最上面的那个盘子移到柱子B。汉诺塔的游戏目标是将所有的盘子从柱子A移动到柱子B或柱子C上面。有一种非常简洁而经典的策略可以帮助我们完成这个游戏。首先,在任何操作执行之前,我们以任意的次序为六种操作(AB、AC、BA、BC、CA和CB)赋予不同的优先级,然后,我们总是选择符合以下两个条件的操作来移动盘子,直到所有的盘子都从柱子A移动到另一根柱子:(1)这种操作是所有合法操作中优先级最高的;(2)这种操作所要移动的盘子不是上一次操作所移动的那个盘子。可以证明,上述策略一定能完成汉诺塔游戏。现在你的任务就是假设给定了每种操作的优先级,计算按照上述策略操作汉诺塔移动所需要的步骤数。
Input
输入有两行。第一行为一个整数n(1≤n≤30),代表盘子的个数。第二行是一串大写的ABC字符,代表六种操作的优先级,靠前的操作具有较高的优先级。每种操作都由一个空格隔开。
Output
只需输出一个数,这个数表示移动的次数。我们保证答案不会超过10的18次方。
Sample Input
Sample Output
设p[n]表示将n个盘子全部移到另一个柱子上需要多少步,p[1] = 1
答案就是求p[n]
……
当采取最优策略时,p[n] = p[n-1]*2+1
但是这题移动有优先级,那么根据优先级的不同会有三种情况
①p[n] = p[n-1]*2+1
②p[n] = p[n-1]*3
③p[n] = p[n-1]*3+2
只要知道对应哪一种,那么直接递推一下答案就出来了
可以打个表,暴力程序搜索模拟都可以
#include<stdio.h>#include<string.h>#define LL long longchar s7[2344] = {"ABACBCBACACB ABACBCCABACB ABACBCCACBBA ABACCABCBACB ABACCABCCBBA ABACCACBBCBA ABBCACBACACB ABBCACCABACB ABBCACCACBBA ABBCBAACCACB ABBCBACAACCB ABBCBACACBAC ABBCCAACBACB ABBCCAACCBBA ABBCCABAACCB ABBCCABACBAC ABBCCACBACBA ABBCCACBBAAC ABCAACBCBACB ABCAACBCCBBA ABCAACCBBCBA ABCABCACBACB ABCABCACCBBA ABCABCBAACCB ABCABCBACBAC ABCABCCBACBA ABCABCCBBAAC ABCACBACBCBA ABCACBBCACBA ABCACBBCBAAC ACABBABCCBCA ACABBACBBCCA ACABBACBCABC ACABCBBABCCA ACABCBBACABC ACABCBCABABC ACBAABBCCBCA ACBAABCBBCCA ACBAABCBCABC ACBABCABCBCA ACBABCCBABCA ACBABCCBCAAB ACBACBABBCCA ACBACBABCABC ACBACBBCABCA ACBACBBCCAAB ACBACBCAABBC ACBACBCABCAB ACCBABBABCCA ACCBABBACABC ACCBABCABABC ACCBBAABBCCA ACCBBAABCABC ACCBBABCABCA ACCBBABCCAAB ACCBBACAABBC ACCBBACABCAB ACCBCAABBABC ACCBCABAABBC ACCBCABABCAB BAACABBCCBCA BAACABCBBCCA BAACABCBCABC BAACBCABCBCA BAACBCCBABCA BAACBCCBCAAB BAACCBABBCCA BAACCBABCABC BAACCBBCABCA BAACCBBCCAAB BAACCBCAABBC BAACCBCABCAB BABCACABCBCA BABCACCBABCA BABCACCBCAAB BABCCBACABCA BABCCBACCAAB BABCCBCAACAB BACBACABBCCA BACBACABCABC BACBACBCABCA BACBACBCCAAB BACBACCAABBC BACBACCABCAB BACBBCACABCA BACBBCACCAAB BACBBCCAACAB BACBCAACABBC BACBCAACBCAB BACBCABCACAB BCABACBACACB BCABACCABACB BCABACCACBBA BCABBAACCACB BCABBACAACCB BCABBACACBAC BCABCAACBACB BCABCAACCBBA BCABCABAACCB BCABCABACBAC BCABCACBACBA BCABCACBBAAC BCBAABACCACB BCBAABCAACCB BCBAABCACBAC BCBACAABACCB BCBACAABCBAC BCBACACBABAC BCCAABACBACB BCCAABACCBBA BCCAABBAACCB BCCAABBACBAC BCCAABCBACBA BCCAABCBBAAC BCCABAABACCB BCCABAABCBAC BCCABACBABAC BCCACBABACBA BCCACBABBAAC BCCACBBAABAC CAABACBCBACB CAABACBCCBBA CAABACCBBCBA CAABBCACBACB CAABBCACCBBA CAABBCBAACCB CAABBCBACBAC CAABBCCBACBA CAABBCCBBAAC CAABCBACBCBA CAABCBBCACBA CAABCBBCBAAC CABCABACBACB CABCABACCBBA CABCABBAACCB CABCABBACBAC CABCABCBACBA CABCABCBBAAC CABCBAABACCB CABCBAABCBAC CABCBACBABAC CABCCBABACBA CABCCBABBAAC CABCCBBAABAC CACBABACBCBA CACBABBCACBA CACBABBCBAAC CACBBCABACBA CACBBCABBAAC CACBBCBAABAC CBACABBABCCA CBACABBACABC CBACABCABABC CBACBAABBCCA CBACBAABCABC CBACBABCABCA CBACBABCCAAB CBACBACAABBC CBACBACABCAB CBACCAABBABC CBACCABAABBC CBACCABABCAB CBBAACABBCCA CBBAACABCABC CBBAACBCABCA CBBAACBCCAAB CBBAACCAABBC CBBAACCABCAB CBBABCACABCA CBBABCACCAAB CBBABCCAACAB CBBACAACABBC CBBACAACBCAB CBBACABCACAB CBCAACABBABC CBCAACBAABBC CBCAACBABCAB CBCABAACABBC CBCABAACBCAB CBCABABCACAB"};char s9[2344] = {"ABACBCBACBCA ABACBCCBBACA ABACBCCBCABA ABACCBBCBACA ABACCBBCCABA ABACCBCABCBA ABBCACBACBCA ABBCACCBBACA ABBCACCBCABA ABBCBAACCBCA ABBCBACBACCA ABBCBACBCAAC ABBCCBACBACA ABBCCBACCABA ABBCCBBAACCA ABBCCBBACAAC ABBCCBCAACBA ABBCCBCABAAC ABCBACBCBACA ABCBACBCCABA ABCBACCABCBA ABCBBCACBACA ABCBBCACCABA ABCBBCBAACCA ABCBBCBACAAC ABCBBCCAACBA ABCBBCCABAAC ABCBCAACBCBA ABCBCABCACBA ABCBCABCBAAC ACABBCBACBCA ACABBCCBBACA ACABBCCBCABA ACABCBBCBACA ACABCBBCCABA ACABCBCABCBA ACBCABBACBCA ACBCABCBBACA ACBCABCBCABA ACBCBAABCBCA ACBCBACBABCA ACBCBACBCAAB ACBCCBABBACA ACBCCBABCABA ACBCCBBAABCA ACBCCBBACAAB ACBCCBCAABBA ACBCCBCABAAB ACCBABBCBACA ACCBABBCCABA ACCBABCABCBA ACCBBCABBACA ACCBBCABCABA ACCBBCBAABCA ACCBBCBACAAB ACCBBCCAABBA ACCBBCCABAAB ACCBCAABBCBA ACCBCABCABBA ACCBCABCBAAB BCABACBACBCA BCABACCBBACA BCABACCBCABA BCABBAACCBCA BCABBACBACCA BCABBACBCAAC BCABCBACBACA BCABCBACCABA BCABCBBAACCA BCABCBBACAAC BCABCBCAACBA BCABCBCABAAC BCACABBACBCA BCACABCBBACA BCACABCBCABA BCACBAABCBCA BCACBACBABCA BCACBACBCAAB BCACCBABBACA BCACCBABCABA BCACCBBAABCA BCACCBBACAAB BCACCBCAABBA BCACCBCABAAB BCBAABACCBCA BCBAABCBACCA BCBAABCBCAAC BCBAACABCBCA BCBAACCBABCA BCBAACCBCAAB BCBACBABACCA BCBACBABCAAC BCBACBACABCA BCBACBACCAAB BCBACBCAABAC BCBACBCAACAB BCCBABACBACA BCCBABACCABA BCCBABBAACCA BCCBABBACAAC BCCBABCAACBA BCCBABCABAAC BCCBACABBACA BCCBACABCABA BCCBACBAABCA BCCBACBACAAB BCCBACCAABBA BCCBACCABAAB BCCBBAABACCA BCCBBAABCAAC BCCBBAACABCA BCCBBAACCAAB BCCBBACAABAC BCCBBACAACAB BCCBCAABACBA BCCBCAABBAAC BCCBCAACABBA BCCBCAACBAAB BCCBCABAABAC BCCBCABAACAB CBABACBCBACA CBABACBCCABA CBABACCABCBA CBABBCACBACA CBABBCACCABA CBABBCBAACCA CBABBCBACAAC CBABBCCAACBA CBABBCCABAAC CBABCAACBCBA CBABCABCACBA CBABCABCBAAC CBACABBCBACA CBACABBCCABA CBACABCABCBA CBACBCABBACA CBACBCABCABA CBACBCBAABCA CBACBCBACAAB CBACBCCAABBA CBACBCCABAAB CBACCAABBCBA CBACCABCABBA CBACCABCBAAB CBBCABACBACA CBBCABACCABA CBBCABBAACCA CBBCABBACAAC CBBCABCAACBA CBBCABCABAAC CBBCACABBACA CBBCACABCABA CBBCACBAABCA CBBCACBACAAB CBBCACCAABBA CBBCACCABAAB CBBCBAABACCA CBBCBAABCAAC CBBCBAACABCA CBBCBAACCAAB CBBCBACAABAC CBBCBACAACAB CBBCCAABACBA CBBCCAABBAAC CBBCCAACABBA CBBCCAACBAAB CBBCCABAABAC CBBCCABAACAB CBCAABACBCBA CBCAABBCACBA CBCAABBCBAAC CBCAACABBCBA CBCAACBCABBA CBCAACBCBAAB CBCABCABACBA CBCABCABBAAC CBCABCACABBA CBCABCACBAAB CBCABCBAABAC CBCABCBAACAB"};char q[13];LL ans[32] = {0,1};int main(void){int n, i, a, b;while(scanf("%d ", &n)!=EOF){for(i=0;i<=11;i++)scanf(" %c", &q[i]);if(strstr(s7, q)!=NULL)a = 2, b = 1;else if(strstr(s9, q)!=NULL)a = 3, b = 0;elsea = 3, b = 2;for(i=2;i<=n;i++)ans[i] = ans[i-1]*a+b;printf("%lld\n", ans[n]);}return 0;}
- bzoj 1019: [SHOI2008]汉诺塔(打表)
- BZOJ 1019: [SHOI2008]汉诺塔
- 【BZOJ 1019】 [SHOI2008]汉诺塔
- 【BZOJ 1019】 [SHOI2008]汉诺塔
- bzoj[SHOI2008]汉诺塔
- [SHOI2008]汉诺塔
- [SHOI2008]汉诺塔
- [SHOI2008]汉诺塔
- [SHOI2008]汉诺塔
- bzoj 4173 打表???
- BZOJ-1023 [SHOI2008]仙人掌图
- bzoj 1002 轮状病毒 打表
- bzoj 3798: 特殊的质数(分块打表)
- bzoj 1022: [SHOI2008]小约翰的游戏John(反nim游戏)
- bzoj 1022: [SHOI2008]小约翰的游戏John(anti-nim)
- bzoj 1018: [SHOI2008]堵塞的交通traffic (线段树维护连通性)
- BZOJ 1018: [SHOI2008]堵塞的交通traffic
- BZOJ 1023: [SHOI2008]cactus仙人掌图
- 单链表逆序问题
- fedora服务器网站搭建
- 象形识字隐私用户数据声明
- 自由幻想UI之宠物界面
- 理解字节序
- bzoj 1019: [SHOI2008]汉诺塔(打表)
- bzoj 1036: [ZJOI2008]树的统计Count(树链剖分)
- top和ps取长补短续篇3之进程定位
- 伪类
- 剑指offer 顺时针打印矩阵
- WIN7 64位系统安装JDK并配置环境变量
- 成员变量和静态变量的区别
- CentOs7 firewall 相关操作
- cy