51nod1066(bash博弈)

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1066

 

题意:中文题诶~

 

思路:感觉博弈全靠yy~

在双方都没有失误的前提下,谁最后会赢。那么我们可以直接选择其中一个人(我选的B啦~),尽量使他赢,如果其无论如何都不能赢的话就是对方赢咯~

我们可以给n分情况讨论一下,如果n=k的话,那么B会输掉(因为题目里A先手啦,直接拿完),也就是A赢,如果n=k+1,因为最懂只能一次拿k个石子,A拿完后一定会留下数目不大于k的石子,B可以直接拿完,所以就是B赢啦,k+2<=n<2*(k+1),A会先拿掉一定数目的石子使剩下的石子数目为k+1,那么接下来无论B如何拿都会剩下数目不大于k的石子,下一轮中A就可以直接拿完剩下的所有石子,所以这种情况下B一定会输咯~

对于n>=2*(k+1)的情况,当n=a*(k+1)时,在每一轮中,无论A先拿走多少石子,B都可以拿走一定数目的石子使剩下的石子仍为(k+1)的整倍数,那么在最后一轮中会有k+1个石子,就是前面讨论的情况啦;当n=a*(k+1)+c(c<k)时,A可以先拿走c个石子,那么当B开始拿石子时石子的数目为a*(k+2),就和前面的情况一样了啦,只不过A和B交换了一下角色;所以最后A会赢啦~

 

代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main(void){
 5     int t, n, k;
 6     scanf("%d", &t);
 7     while(t--){
 8         scanf("%d%d", &n, &k);
 9         if(n%(k+1)){
10             printf("A\n");
11         }else{
12             printf("B\n");
13         }
14     }
15     return 0;
16 }

 

posted @ 2016-12-16 20:37  geloutingyu  阅读(287)  评论(0编辑  收藏  举报