zoukankan      html  css  js  c++  java
  • 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
    ");
    11         }else{
    12             printf("B
    ");
    13         }
    14     }
    15     return 0;
    16 }
  • 相关阅读:
    Ubuntu vi命令
    Aria2 使用
    axel 参数 文件下载地址
    序列化模块、加密模块
    项目开发规范、time模块、日志
    递归函数(了解)
    模块
    函数进阶四(装饰器、内置函数)
    函数进阶三(生成器、生成器表达式、匿名函数)
    函数进阶二(函数名运用,闭包,迭代器)
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/6188320.html
Copyright © 2011-2022 走看看