首页 > 其他 > 详细

【题解】1-2-K Game

时间:2019-08-09 14:46:01      阅读:103      评论:0      收藏:0      [点我收藏+]

题目大意

??现有\(n\)个东西,每次可以取\(1\)个,\(2\)个或\(k\)个。Alice和Bob轮流取,且Alice先取。问谁是最后一个取的。(\(0 \leq n \leq 10^9\)\(3 \leq k \leq 10^9\))
?

题解

??首先,我们先考虑只有\(1\)\(2\)的情况。容易想到\(3|k\)时,先手必败。
??此时,我们再加上\(k\)。随手推几下就会发现,当\(k \bmod 3 \not = 0\)时,\(k\)也就相当于是\(1\)\(2\),这样的话直接判断即可。
??而当\(3|k\)时,实际上,当Alice取\(1\)\(k\)时,Bob也能取\(k\)\(1\),此时共取了\(k + 1\)个,而当\(Alice\)\(1\)\(2\)时,\(Bob\)也可以取\(2\)\(1\),总共取了\(3\)个,对答案不影响。
??所以,当\(3|k\)时,我们可以让\(n\)\(k + 1\)取余,然后最多只能取一次\(K\),判断是否能取\(k\),或再进行无\(k\)判断即可。

#include <iostream>

using namespace std;

int T;
int n, k;

int main() 
{
    cin >> T;
    while(T--) 
    {
        cin >> n >> k;
        if(k % 3) 
        {
            if(n % 3) cout << "Alice\n";
            else cout << "Bob\n";
            continue;
        }
        n %= k + 1;
        if(n == k) cout << "Alice\n";
        else if(n % 3) cout << "Alice\n";
        else cout << "Bob\n";
    }
    return 0;
}

【题解】1-2-K Game

原文:https://www.cnblogs.com/kcn999/p/11326858.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!