uvaoj 10795 - A Different Task
2015-10-06 23:31
369 查看
题解:
1.汉诺塔问题,试图将初始情况和终止情况通过一个中间状态联系在一起
总结:
1.这几天一直在想uvaoj 10253,感觉有点小坎还没有想出来,感觉以后应该明确解题思路后再写题,这样效率会高一些,嗯,写的过程中发现有些问题没有考虑到,暂时没有想出怎么做,下面再捋一遍这道题的思路,也许会比较好,因为对这道题的思路都是片段化 + 试代码试出来的。
2.以后写题,不管有多大的把握,或者多着急,都还是先把思路想清楚再写,这样可以节约很多的时间
3.(1 << (long long )k)就会溢出
((long long)1 << k)才可以AC
1.汉诺塔问题,试图将初始情况和终止情况通过一个中间状态联系在一起
总结:
1.这几天一直在想uvaoj 10253,感觉有点小坎还没有想出来,感觉以后应该明确解题思路后再写题,这样效率会高一些,嗯,写的过程中发现有些问题没有考虑到,暂时没有想出怎么做,下面再捋一遍这道题的思路,也许会比较好,因为对这道题的思路都是片段化 + 试代码试出来的。
2.以后写题,不管有多大的把握,或者多着急,都还是先把思路想清楚再写,这样可以节约很多的时间
3.(1 << (long long )k)就会溢出
((long long)1 << k)才可以AC
#include<iostream> #include<cstdio> #include<cstring> using namespace std; typedef long long ll; #define MAXN 70 int a[MAXN],b[MAXN]; ll solve(int from,int k,int *p) { while(k >= 0 && from == p[k])k--; if(k < 0)return 0; return solve(6 - p[k] - from,k - 1,p) + ((ll)1 << k); } int main() { int kcas = 1,n; while(cin >> n && n) { for(int i = 0;i < n;i++)cin >> a[i]; for(int i = 0;i < n;i++)cin >> b[i]; int k = n - 1; while(k >= 0 && a[k] == b[k])k--; ll ans = 0; if(k >= 0) { int other = 6 - a[k] - b[k]; ans = solve(other,k - 1,a) + solve(other,k - 1,b) + 1; } printf("Case %d: %lld\n",kcas++,ans); } }
相关文章推荐
- uva679 Dropping Balls 入门经典II 第六章数据结构基础 例题6-6
- uva839 - Not so Mobile 入门经典II 第六章数据结构基础 例题6-9
- uva120 Stacks of Flapjacks 入门经典II 第八章例题8-1
- uvaoj 1073 - Glenbow Museum
- uvaoj 11796 - Dog Distance
- uvaoj 11825 - Hackers' Crackdown
- 读《Visual C++ 2013 入门经典》之感想
- 《训练指南》中的“突击战”和分金币问题
- 思维的体操——墓地雕塑和蚂蚁问题
- 思维的体操——偶数矩阵
- 思维的体操——李白喝酒(2014年春蓝桥杯个人赛)
- 我和《Visual c++2013入门经典(第7版)》的那些事
- 第一章 C语言编程(Ivor Horton)
- “Docker Practice”学习笔记
- maven(四)maven使用入门
- MySql基础教程一(查询,插入,更新,删除,创建)
- uva 11997——K Smallest Sums
- uva 1203—— Argus
- uva 11995——I Can Guess the Data Structure!
- uva 10479——The Hendrie Sequence