分贝壳游戏(bash博弈)

链接:https://ac.nowcoder.com/acm/contest/9752/C
来源:牛客网

现在牛牛和牛妹一起出去海滩游玩,由于他们两个都不会游泳,所以他们在海滩捡了很多好看的贝壳,可是捡着捡着他们就感觉无聊了,所以他们决定拿这些贝壳玩一些游戏。
他们一共捡了n个贝壳,现在他们这n个贝壳放成一堆。然后轮流取贝壳,牛牛先取。牛牛一次能取[1,p]个贝壳,牛妹一次能取[1,q]个贝壳,能拿到最后一个贝壳的人赢
问牛牛和牛妹都足够聪明的情况下,最后谁能取得胜利
如果牛牛必胜,返回1
如果牛妹必胜,返回-1
如果没有人有必胜策略,返回0

示例1
输入
复制
8,3,3
返回值
复制
-1
示例2
输入
复制
3,4,2
返回值
复制
1
示例3
输入
复制
6,3,2
返回值
复制
1
示例4
输入
复制
6,3,5
返回值
复制
-1
备注:
对于100%的数据,1\leq n\leq 1e9,1\leq q,p\leq 1e9对于100%的数据,1≤n≤1e9,1≤q,p≤1e9
(其中30%的数据,p=q)(其中30%的数据,p=q)

bash博弈的升级版,如果n<p肯定第一个赢,如果说p=q;
如果n%(p+1)=0;那么先手必输,为什么呐,假定n=p+1,那么无论第一个怎么取,剩下的第二个都能取完,如果n是p+1的倍数,每一轮都是一样的,那么先手比败。
如果说p>q;
那么大的数就可以使n变为比败状态。
假如n=6,p=3,q=2;
p先拿3个,然后还剩3个,n%(q+1)=0;
q怎么拿,都会输。
假如
n=10, p=3,q=2;
p先拿一个,还剩9个,n%(q+1)=0;
q怎么拿,都会输。
假如n=10 p=2 q=3;
只要p一次性拿不完就必输,假如p拿2个,n=8;p拿2个,n=6;n%(p+1)=0;
p必输。

因为大的数可以有选择的跟小数一样,只要构造出了比败状态,那么它就赢了。

class Solution {
public:
    /**
     * 
     * @param n int整型 
     * @param p int整型 
     * @param q int整型 
     * @return int整型
     */
    int Gameresults(int n, int p, int q) {
        // write code here
        if(n<p)
            return 1;
         if(p==q)
         {
             if(n%(p+1)==0)
                 return -1;
             return 1;
         }
        return p>q?1:-1;
        
    }
};
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值