取沙子游戏

Problem K. 取沙子游戏

https://codeforces.com/gym/105336

代码

cpp 复制代码
#include <bits/stdc++.h>
#define endl "\n"
using namespace std;

int lowbit(const int &n) // 求lowbit
{
    return n & (-n);
}

void Solution() // Solution一般来说不用传参
{
    int n, k; // n粒沙子,每次取沙子,且数量不超过k
    cin >> n >> k;
    if (k >= n) // 1.如果k>=n,则Alice可以一次取完,必胜。
    {
        cout << "Alice" << endl;
        return;
    }
    // k<n的情况
    if (lowbit(n) <= k) // 2.如果lowbit小于等于k,则Alice必赢。Alice取lowbit,后面不管Bob怎么取,都和Bob取一样的,这样Alice肯定是。3.这里面包含了n为奇数,则Alice第一次取一个就必胜的情况。因为此时lowbit(n)=1,一定满足lowbit(n)<=k。
    {
        cout << "Alice" << endl;
        return;
    }
    else // 4.否则的话,Alice不一定赢
    {
        cout << "Bob" << endl;
        return;
    }
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int T; // T组数据
    cin >> T;
    while (T--)
    {
        Solution();
    }
    return 0;
}

​ 这道题思路很重要,总共分为四种情况。

  1. k>=n。这种情况下,Alice可以在第一次直接全部取完,Alice必胜。
  2. n为奇数。Alice第一次取一个就必胜。(这也是lowbit(n)<=k的情况,代码中没有另外作为一种情况写出)
  3. n为偶数且lowbit(n)<=k。这种情况下,只要Alice第一次取lowbit(n),后面不管Bob取什么,Alice都和Bob选一样的,就可以使得除了第一次Alice取的次数外取了偶数次,Alice必赢。
  4. n为偶数且lowbit(n)>k。这种情况下,Alice就不一定必胜,所以输出Bob。
  • 补充lowbit知识。Lowbit函数是一种特殊的位操作,用于找到一个数的最低位的1。
cpp 复制代码
int lowbit(const int &n) // 求lowbit
{
    return n & (-n);
}

传奇计算机大神miyou的亲笔稿:

相关推荐
向宇it21 小时前
【unity游戏开发——网络】使用Unity+PurrNet+Heathens+Steam,在 Unity 中通过 Steam与你的朋友建立联系
网络·游戏·unity·c#·游戏引擎·steam
HUST1 天前
C 语言 第七讲:数组和函数实践:扫雷游戏
c语言·开发语言·数据结构·vscode·算法·游戏·c#
德迅云安全—珍珍1 天前
游戏掉线使用游戏盾SDK能优化网络吗
网络·游戏
土丁爱吃大米饭1 天前
游戏动作(OpenPose)素材采集与优化全攻略
游戏·序列帧动画·动捕·游戏设计·游戏素材·角色动作
锦瑟弦音1 天前
微信小游戏分包(cocos自带分包)
笔记·游戏
ok406lhq2 天前
unity游戏调用SDK支付返回游戏会出现画面移位的问题
android·游戏·unity·游戏引擎·sdk
郝学胜-神的一滴2 天前
封装OpenGL的Shader相关类:从理论到实践
开发语言·c++·程序人生·游戏·图形渲染
CreasyChan2 天前
unity射线与几何检测 - “与世界的交互”
算法·游戏·3d·unity·数学基础
Yeniden2 天前
Deepeek用大白话讲解 --> 备忘录模式(企业级场景1,撤销重做2,状态保存3,游戏存档4)
游戏·备忘录模式
未来之窗软件服务2 天前
自建开发工具IDE(七)数据库集群智能升级东方仙盟数据库同化,五行八卦排序+游戏修仙,精准补齐差异还能圆武侠梦—东方仙盟筑基期
数据库·游戏·oracle·仙盟创梦ide·东方仙盟·东方仙盟架构·东方仙盟商业开发