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 題目連結 題目 給你一棵樹,要求你求出每棵子樹的重心. 前言 完全不 ...
随机推荐
- 联赛模拟测试5 涂色游戏 矩阵优化DP
题目描述 分析 定义出\(dp[i][j]\)为第\(i\)列涂\(j\)种颜色的方案数 然后我们要解决几个问题 首先是求出某一列涂恰好\(i\)种颜色的方案数\(d[i]\) 如果没有限制必须涂\( ...
- 项目升级springboot2.0注意事项
一.pring boot 2.0以后, springboot jpa findById 返回类型变化@NoRepositoryBeanpublic interface CrudRepository&l ...
- 使用AOP和Validator技术对项目接口中的参数进行非空等校验
javax.validation.Validator基础知识补充: validator用来校验注解的生效,如: @NotBlank(message = "地址名不能为空") pri ...
- Book of Shaders 04 - 网格噪声:Worley Noise
0x00 思路 假设要生成 4 个网格,可以先在空间中指定 4 个特征点.对于每个像素点,计算它到最近特征点的距离,将这个距离当作结果值输出. #ifdef GL_ES precision mediu ...
- What number should I guess next ?——由《鹰蛋》一题引发的思考
What number should I guess next ? 这篇文章的灵感来源于最近技术部的团建与著名的DP优化<鹰蛋>.记得在一个月前,查到鹰蛋的题解前,我在与同学讨论时,一直试 ...
- 009 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 03 什么是变量?
009 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 03 什么是变量? 什么是变量? 形象化的生活中的例子理解什么是变量以及变量的三个元素 我们可以根据客人要求 ...
- 【学习笔记/题解】虚树/[SDOI2011]消耗战
题目戳我 \(\text{Solution:}\) 题目很显然可以设\(dp[i]\)表示\(i\)的子树内的关键点都不和\(i\)联通的最小待机,有如下\(dp\)方程: \(v\in son_u, ...
- 简单区间dp
题目链接 对于基本区间dp,设dp[l][r]是区间l到r的最大价值. 我们可以枚举区间的长度,在枚举左端点,判断即可. 当右端点大于n,就break. dp[l][r]=max(dp[l+1][r] ...
- 利用TfidfVectorizer进行中文文本分类(数据集是复旦中文语料)
1.对语料进行分析 基本目录如下: 其中train存放的是训练集,answer存放的是测试集,具体看下train中的文件: 下面有20个文件夹,对应着20个类,我们继续看下其中的文件,以C3-Art为 ...
- CN1,CN2 GT和CN2 GIA的区别
用一句话来概括,CN1主要定位于承载普通质量的互联网业务,而CN2则定位于承载企业VPN业务.中国电信的自营业务及高质量的互联网业务,CN2 GIA又比GT要好一些. 顺序:CN2 GIA>CN ...