zoukankan      html  css  js  c++  java
  • CF1194D 1-2-K Game

    题目大意

      现有(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 mod 3 ot = 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
    ";
                else cout << "Bob
    ";
                continue;
            }
            n %= k + 1;
            if(n == k) cout << "Alice
    ";
            else if(n % 3) cout << "Alice
    ";
            else cout << "Bob
    ";
        }
        return 0;
    }
    
  • 相关阅读:
    第十五篇 Django Rest Framework
    第十四篇 Mongodb数据库
    Redis相关操作
    celery
    vscode
    VScode-HTML
    第十三篇 Scrapy框架
    第十二篇 Flask 【进阶篇】 插件-SQLAlchmey等
    附录:1装饰器-functools使用
    第十二篇 Flask 基础篇
  • 原文地址:https://www.cnblogs.com/kcn999/p/11326858.html
Copyright © 2011-2022 走看看