B. GameGame 解析(思維、博弈)
Codeforce 1383 B. GameGame 解析(思維、博弈)
今天我們來看看CF1383B
題目連結
題目
兩個人在玩遊戲,有一個長度為\(n\)的數列\(a\),每次每個人選一個數字和目前自己的分數XOR(初始為0分),最後拿到最多分數的人贏,求誰會贏?
前言
博弈的題目一直不是很會做,這次這題有個我平時可能不會想到的新想法:可以嘗試讓其中一個玩家跟隨另一個玩家做動作,如果被跟隨的那個玩家最後會輸,那麼跟隨的那個玩家就會贏。這是因為我們給出了一個明確的移動方法。
想法
首先要知道一件事:如果一個玩家能夠使得分數有最高位的bit,並且另外一個人沒有,那麼就贏了。這是因為在右邊的bit不管有多少,都比不上最左邊的bit(正式來說:\(2^n>\sum\limits_{i=0}^{n-1}2^i\ \forall n\in\mathbb{N}_{\ge1}\))。
那麼我們可以先統計對於bit有幾個元素有這個bit,接著我們從最左邊的bit開始「考慮」:
分為兩種情況:
這個bit有偶數個,那麼由於兩個玩家只有2種拿的方法
- 偶偶
- 奇奇
不管玩家怎麼拿,這個bit最後的狀態都是一樣的,所以我們可以完全不用考慮這個bit。
這個bit有奇數個,也就是玩家要去搶這個bit: 首先另\(x=\)有這個bit的元素的數量,\(y=n-x\)也就是剩下的數字的數量(這個bit是\(0\))。由於玩家們拿了\(4\)個\(1\)等同於沒有改變狀態,因此有以下的分類:
- \(x\mod 4=1\) and \(y\mod 2=0\): 先手先拿一個\(1\),接著完全照搬後手的行動。如此易發現先手會贏。
- \(x\mod 4=1\) and \(y\mod 2=1\): 先手先拿一個\(1\),接著完全照搬後手的行動,直到後手拿走了最後一個\(0\),那麼接著就剩下要拿偶數個\(1\),並且是先手先拿。由於是\(x\mod 4=1\),所以最後是先手贏。
- \(x\mod 4=3\) and \(y\mod 2=0\): 後手完全照搬先手的行動,最後先手一定會拿到偶數個\(1\),所以後手贏。
- \(x\mod 4=3\) and \(y\mod 2=1\): 先手先拿一個\(0\),那麼就是3.的情況了,先手贏。
程式碼:
const int _n=1e5+10;
int t,n,a[_n],cnt[32];
main(void) {cin.tie(0);ios_base::sync_with_stdio(0);
cin>>t;while(t--){
cin>>n;rep(i,0,n)cin>>a[i]; memset(cnt,0,sizeof cnt);
rep(j,0,30)rep(i,0,n)cnt[j]+=((a[i]&(1<<j))?1:0);
per(i,0,30){
if(cnt[i]%2==0)continue;
int x=cnt[i],y=n-x;
if(x%4==3 and y%2==0){cout<<"LOSE\n";goto A;}
else {cout<<"WIN\n";goto A;}
}cout<<"DRAW\n";
A:;
}
return 0;
}
標頭、模板請點Submission看
Submission
B. GameGame 解析(思維、博弈)的更多相关文章
- A. Arena of Greed 解析(思維)
Codeforce 1425 A. Arena of Greed 解析(思維) 今天我們來看看CF1425A 題目連結 題目 略,請直接看原題. 前言 明明是難度1400的題目,但總感覺不是很好寫阿, ...
- E. Almost Regular Bracket Sequence 解析(思維)
Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ...
- C2. Power Transmission (Hard Edition) 解析(思維、幾何)
Codeforce 1163 C2. Power Transmission (Hard Edition) 解析(思維.幾何) 今天我們來看看CF1163C2 題目連結 題目 給一堆點,每兩個點會造成一 ...
- F. Moving Points 解析(思維、離散化、BIT、前綴和)
Codeforce 1311 F. Moving Points 解析(思維.離散化.BIT.前綴和) 今天我們來看看CF1311F 題目連結 題目 略,請直接看原題. 前言 最近寫1900的題目更容易 ...
- B. Two Arrays 解析(思維)
Codeforce 1417 B. Two Arrays 解析(思維) 今天我們來看看CF1417B 題目連結 題目 略,請直接看原題. 前言 a @copyright petjelinux 版權所有 ...
- C. k-Amazing Numbers 解析(思維)
Codeforce 1417 C. k-Amazing Numbers 解析(思維) 今天我們來看看CF1417C 題目連結 題目 略,請直接看原題. 前言 我實作好慢... @copyright p ...
- D. Road to Post Office 解析(思維)
Codeforce 702 D. Road to Post Office 解析(思維) 今天我們來看看CF702D 題目連結 題目 略,請直接看原題. 前言 原本想說會不會也是要列式子解或者二分搜,沒 ...
- C. Bank Hacking 解析(思維)
Codeforce 796 C. Bank Hacking 解析(思維) 今天我們來看看CF796C 題目連結 題目 略,請直接看原題. 前言 @copyright petjelinux 版權所有 觀 ...
- B. Kay and Snowflake 解析(思維、DFS、DP、重心)
Codeforce 685 B. Kay and Snowflake 解析(思維.DFS.DP.重心) 今天我們來看看CF685B 題目連結 題目 給你一棵樹,要求你求出每棵子樹的重心. 前言 完全不 ...
随机推荐
- 记一次Java获取本地摄像头(基于OpenCV)
OpenCV官网下载地址(下载安装后,在安装目录可以找到动态链接库和OpenCv.jar) https://opencv.org/releases/ 安装完成后,这是我的安装目录 maven 依赖(这 ...
- Urule开源版系列5——RuleSetParser解析过程
接上期Urule开源版系列4--Core包核心接口之规则解析过程 之前源码到了Parser,这期详细解析下RuleSetParser的解析过程 1.主流程 特殊处理一个属性 循环处理元素 当元素名称是 ...
- 【Processing日常2】群星1
之前在CSDN上发表过: https://blog.csdn.net/fddxsyf123/article/details/79747064
- Windows下设置Mongodb用户名密码
MongoDB认证: 在默认的情况下,Mongodb是监听在127.0.0.1 IP上的,端口号默认为27017,任何客户端都可以连接,不需要认证 默认情况下,Mongodb也是没有管理账户的,除非你 ...
- CUP的MESI协议
MESI协议中的状态 CPU中每个缓存行(caceh line)使用4种状态进行标记(使用额外的两位(bit)表示): M: 被修改(Modified) 该缓存行只被缓存在该CPU的缓存中,并且是被修 ...
- Optimisation
https://www.cnblogs.com/wuyudong/p/writing-efficient-c-and-code-optimization.html 1 不要过多使用 stack ,尽量 ...
- Python练习题 048:Project Euler 021:10000以内所有亲和数之和
本题来自 Project Euler 第21题:https://projecteuler.net/problem=21 ''' Project Euler: Problem 21: Amicable ...
- Book of Shaders 03 - 学习随机与噪声生成算法
0x00 随机 我们不能预测天空中乌云的样子,因为它的纹理总是具有不可预测性.这种不可预测性叫做随机 (random). 在计算机图形学中,我们通常使用随机来模拟自然界中的噪声.如何获得一个随机值呢, ...
- CentOS 7安装Nginx 1.10.2
安装epel-release源并进行安装 yum install epel-release yum update(时间会有点长) yum install nginx 相关操作: systemctl s ...
- Metasploit简单使用——后渗透阶段
在上文中我们复现了永恒之蓝漏洞,这里我们学习一下利用msf简单的后渗透阶段的知识/ 一.meterperter常用命令 sysinfo #查看目标主机系统信息 run scraper #查看目标主机详 ...