uva 1567 - A simple stone game(K倍动态减法游戏)
2014-08-09 09:45
381 查看
题目链接:uva 1567 - A simple stone game
题目大意:给定K和N,表示一堆石子有N个,先手第一次可以取1~N-1个石子,取到最后一个石子的人胜利,单词每次操作时,取的石子数不能超过对手上一次取的石子数m的K倍。问先手是否可以必胜,可以输出最小的首次操作。
解题思路:这题想了一天,又是打表找规律,又是推公式的,楞是做不出来,后来在网上找到了一篇题解,将的很清楚,解题宝典
题目大意:给定K和N,表示一堆石子有N个,先手第一次可以取1~N-1个石子,取到最后一个石子的人胜利,单词每次操作时,取的石子数不能超过对手上一次取的石子数m的K倍。问先手是否可以必胜,可以输出最小的首次操作。
解题思路:这题想了一天,又是打表找规律,又是推公式的,楞是做不出来,后来在网上找到了一篇题解,将的很清楚,解题宝典
/******************* * K倍动态减法游戏 * 参考:http://www.cnblogs.com/jianglangcaijin/archive/2012/12/19/2825539.html *******************/ #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1e6+5; int N, K, a[maxn], b[maxn]; int main () { int cas; scanf("%d", &cas); for (int i = 1; i <= cas; i++) { scanf("%d%d", &N, &K); int p = 0, q = 0; a[0] = b[0] = 0; while (a[p] < N) { a[p+1] = b[p] + 1; p++; while (a[q + 1] * K < a[p]) q++; b[p] = b[q] + a[p]; } printf("Case %d: ", i); if (N == a[p]) printf("lose\n"); else { int ans; while (N) { if (N >= a[p]) { N -= a[p]; ans = a[p]; } p--; } printf("%d\n", ans); } } return 0; }
相关文章推荐
- uva 1567 - A simple stone game(K倍动态减法游戏)
- HDU A simple stone game [K倍动态减法游戏]
- HDU 2486 (HDU 2580, POJ 3922) A simple stone game K倍动态减法游戏
- a simple stone game--k倍动态规划减法游戏
- 斐波那契博弈-K倍动态减法游戏(Poj-3922 A simple stone game)
- HDOJ 题目2486 A simple stone game(K倍动态减法游戏,模板)
- POJ 3922 A simple stone game(K倍减法游戏)
- [K倍动态减法问题] HDU 2486 & HDU2580 & POJ3922 a simple stone game
- POJ 3922 A simple stone game(K倍减法游戏)
- POJ 3922 A simple stone game(K倍减法游戏)(*)
- POJ 3922 A simple stone game(K倍减法游戏)
- POJ 3922 A simple stone game(K倍减法游戏)
- Poj-3922 A simple stone game(博弈,k倍动态减法)
- uva 1378 A Funny Stone Game 博弈/组合游戏 sg定理
- uva 1378 - A Funny Stone Game(组合游戏)
- uva 1378 - A Funny Stone Game(组合游戏)
- hdu 2486 A simple stone game
- UVA 141 The Spot Game 斑点游戏。。
- UVa 10400 - Game Show Math 游戏中的数学 dfs+判重
- hdu 2486/2580 / poj 3922 A simple stone game 博弈论