思路:先特判k=1和k>=n的情况,然后我们可以发现其余情况一定是第二个人赢。证明:因为排除了特殊情况,所以第一个人第一次不可能拿走全部的coin,对于剩下的coin,记为m个,如果第二个人一次就能拿走全部的coin,那么第二个人就赢了;如果不能,说明m>k>=2,则m至少为3,所以第二个人一定可以拿走一些连续的coin,将剩下的coin变成长度相等的两条链,此后第二个人只要模仿第一个人的操作:即第一个人在某一堆拿走了一些coin,第二个人就在另一堆拿走等量的coin,最后便会获胜。
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 using namespace std; 5 6 int main () 7 { 8 int t; 9 scanf("%d", &t); 10 for ( int _case = 1; _case <= t; _case++ ) 11 { 12 printf("Case %d: ", _case); 13 int n, k; 14 scanf("%d%d", &n, &k); 15 if ( n <= k ) 16 { 17 printf("first "); 18 continue; 19 } 20 if ( k == 1 ) 21 { 22 if ( n & 1 ) printf("first "); 23 else printf("second "); 24 continue; 25 } 26 printf("second "); 27 } 28 return 0; 29 }