HDU 3951 (博弈) Coin Game
先考虑两种简单的情况:
- 如果先手能一次把硬币拿完,即 k >= n ,那么先手胜
- 如果每次只能拿一个硬币, 即 k = 1 ,那么如果有奇数个硬币先手胜,如果有偶数个硬币后手胜。
剩下的情况就是先手一次拿不完,而且每次可以拿一个或者拿两个硬币。
剩下的硬币会变成一条链,如果后手能拿完最好,不能拿完的话就拿一个或两个硬币使这条链变成长度相等的两条。
这一定是能做到的,
因为如果这条链有奇数个硬币,那么拿走中间的那个;
如果有偶数个硬币,拿走中间的两个。
变成相等的两条链之后,先手在哪条链拿走多少个硬币,后手就在另外一条链中拿走同样的硬币,直到拿完所有的硬币。
因此后手必胜。
1 #include <cstdio> 2 3 int main() 4 { 5 //freopen("in.txt", "r", stdin); 6 7 int T; scanf("%d", &T); 8 for(int kase = 1; kase <= T; kase++) 9 { 10 int n, k; 11 scanf("%d%d", &n, &k); 12 printf("Case %d: ", kase); 13 bool first; 14 if(k == 1) first = n & 1 ? true : false; 15 else if(k >= n) first = true; 16 else first = false; 17 printf("%s\n", first ? "first" : "second"); 18 } 19 20 return 0; 21 }