hdu 3951 博弈

思路:先特判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\n");
18             continue;
19         }
20         if ( k == 1 )
21         {
22             if ( n & 1 ) printf("first\n");
23             else printf("second\n");
24             continue;
25         }
26         printf("second\n");
27     }
28     return 0;
29 }

 

posted @ 2015-07-25 20:34  hxy_has_been_used  阅读(150)  评论(0编辑  收藏  举报