首页 > 其他分享 >题解 - Alice

题解 - Alice

时间:2024-07-30 18:54:28浏览次数:12  
标签:奇数 题解 石子 Alice n1 Bob n2

题目描述

Alice 和 Bob 在玩游戏,游戏规则如下:

  • 有两堆石子,每堆石子有非负整数个
  • Alice 与 Bob 轮流操作,Alice 先手,每次可以从任意一堆石子中取出若干个
  • 取出的石子个数应满足为另一堆石子个数的因数(此处规定任何数均为0的因数)
  • 将石子取完的玩家获胜

给定一个初始状态,现在请判断,在 Alice,Bob 均采用最佳策略时,最后谁将获胜

输入

第一行一个非负整数 T 表示接下来有 T 种需进行判断的状态.
接下来 T 行,每行两个非负整数,表示两堆石子的数量 n1,n2.

输出

共 T 行,第 i 行一个字母 A 或 B,A 表示 Alice 将会赢得游戏,B 表示 Bob 将会赢得游戏.

样例

样例输入

4
1 4
5 5
1 1
2 5

样例输出

A
B
B
A

提示

对于所有数据: 0≤T≤1e6,0≤n1,n2≤1e9,n1,n2 不同时为 0.
对于测试点 1,2: n1,n2≤5.
对于测试点 3,4: n1,n2≤1000.
对于测试点 5,6: n1,n2 互质.

分析

简单思维题。

因为任何数均为0的因数,所以我们可以得出一个结论:当场上存在0时,直接把另外一堆拿空,游戏结束,当前回合操作者获胜!

必败状态:两个奇数。

证明:假设Alice目前面临的状态为两个奇数,由于奇数的因子只有奇数,所以Alice操作后状态一定变为一奇一偶,那么Bob可以通过将偶数减去1,使得状态再次变为两个奇数,故Alice将始终面临两个奇数的状态,最终在Alice某次操作后,会把其中一个奇数变为0,此时Bob获胜。

必胜状态:一奇一偶。

证明:可以通过将偶数减去1,使得状态变为两个奇数。

再考虑两个偶数的情况:

对于两个偶数,谁都不会去把一个数变成奇数,因此拿走的数都是偶数,即所有操作建立在2的倍数上
因此我们可以对n和m不断除2,直到变为“非两个偶数”的情况,再根据必胜状态和必败状态判断即可。

代码

#pragma GCC optimize(2)
#include<bits/stdc++.h>

using namespace std;

int n,m;

void solve(){
    cin >> n >> m;

    if(n % 2 && m % 2) cout << "B\n";
    else if(!(n % 2 == 0 && m % 2 == 0)) cout << "A\n";
    else{
        while(n % 2 == 0 && m % 2 == 0) n /= 2,m /= 2;
        if(n % 2 && m % 2) cout << "B\n";
        else cout << "A\n";
    }
}


int main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);

    int t;
    cin >> t;    
    while(t--){
        solve();
    }

    return 0;
}

标签:奇数,题解,石子,Alice,n1,Bob,n2
From: https://blog.csdn.net/qq_73162098/article/details/140782837

相关文章

  • [POI2007] OSI-Axes of Symmetry 题解
    给出一个多边形,求对称轴数量。考虑对于一个多边形,其是对称的当且仅当对于若干个边(角),其左右的角与边都是对称的。考虑如果我们对于内角构造出一种单射,映射为一个整数,将边映射为它的边长,那么我们按照角,边,角,边,……的顺序将他们加入数组中,能构造出一个长度为\(2n\)的数组,将这个......
  • 旅行 题解
    题目id:20300题目描述鱼大大计划环华夏自驾游游玩一圈,在他的计划中,这次旅行将在\(m\)天内完成,预计游玩\(n\)个城市,每个城市游玩\(x\)天,然后赶路开车以均速去到下一个城市,现鱼大大从海洋城市出发,按游玩顺序先后给出每个城市和上一个城市之间的距离(\(km\)),问鱼大大每天至少赶路多......
  • 质数差列 题解
    题目id:20315题目描述驰骋宇宙的鱼大大找到了一个古遗迹,稍作研究后发现这是一个来着远古的质数星球文明遗迹,这个文明的特点是所有事物都和质数息息相关。于是,鱼大大赶紧列出了一堆的质数,以方便自己的研究。这天鱼大大找到了质数星球文明的一个遗迹仓库大门,正准备破解密码的同时......
  • [POI2008] POC-Trains 题解
    前言题目链接:洛谷。时间复杂度和输入同阶的做法。题意简述有\(n\)(\(n\leq10^3\))个长\(m\)的字符串,\(q\)(\(q\leq10^5\))次操作,交换两个字符串的两个字符。问每个字符串在所有时刻,最多有几个和它相等。题目分析套路做法看到字符串相等,想到使用哈希。但是要支持修改,怎么......
  • 题解:[ABC363D] Palindromic Number
    提示特定位数的回文数数量是可以快速计算出来的,对于特定的位数\(n\),第一位由于不能有前导\(0\),共有\(9\)种选择,而从第\(2\)位到第\(\frac{n+1}{2}\)位都有\(10\)种选择(一个回文数完全由它的前半部分确定)。所以\(n\)位数中共有\(S(n)=9*10^\frac{n-1}{2}......
  • P3811 【模板】模意义下的乘法逆元 题解
    【模板】模意义下的乘法逆元题目背景这是一道模板题题目描述给定n,pn,pn,p求......
  • 题解:Codeforces Round 962 (Div. 3) D
    D.Funtimelimitpertest:2secondsmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputCountingisFun!—satyam343Giventwointegers\(n\)and\(x\),findthenumberoftriplets(\(a,b,c\))ofpositiveintegerss......
  • [USACO1.5] 八皇后 Checker Challenge 题解
    [USACO1.5]八皇后CheckerChallenge题目描述一个如下的\(6\times6\)的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。上面的布局可以用序列\(2\4\6\1\3\5\)来描述,第\(i\)个数字表示在......
  • 题解:P10815 【模板】快速读入
    闲着没事儿水篇tj题目大意题目大意极其粗暴,记得\(10^8\times10^8=10^{16}>2^{31}-1\)会爆int,开longlong就好。于是这个题就变成了一个读入输出优化模板题。这不又回去了。另外,输入输出常数优化也很常用,抢最优解和骗分时都可以用上。1cin/cout版本操作ios::......
  • 奇怪的汉诺塔 - 题解
    奇怪的汉诺塔时间限制:C/C++1000MS,其他语言2000MS内存限制:C/C++256MB,其他语言512MB描述汉诺塔问题,条件如下:这里有\(A\)、\(B\)、\(C\)和\(D\)四座塔。这里有\(n\)个圆盘,\(n\)的数量是恒定的。每个圆盘的尺寸都不相同。所有的圆盘在开始时都堆叠在塔\(A\)......