C. Even Number Addicts
Problem - C - Codeforces
题意是给你一串序列,每个人轮流,如果Alice最后的总和是偶数就赢,不然Alice最后的总和是奇数就输,Bob就赢,问最后谁赢了
博弈论
我感觉博弈论有点难懂,然后专门问了一下大佬。
要分清楚必胜和必输的状态
本题来看
A的本质是想让自己赢,所以她需要偶数
B的本质是想让自己赢,所以他需要A是奇数
对于一个数来说,加上一个偶数对这个数的奇偶性没有任何的影响,加上一个奇数会改变这个数的奇偶性。
所以来分析一下:
如果此时的A选了一个偶数,那B必定也选偶数,因为B想把奇数留下让A选,改变A的奇偶性
如果此时的A选了一个奇数,那B必定也选奇数,因为B想把偶数留下让A选,不改变A的奇偶性
那么此时就好选了,因为奇数和偶数完全可以分开选了
看到别人的思路:
以4个奇数或者偶数为一组
比如以4个奇数为一组,那一组数中的偶数就是n-奇数
①(奇数的数量%4==0) :先手必胜
不管这里先选偶数还是先选奇数,偶数选完选奇数或者奇数选完选偶数,偶数没啥影响不用在意个数,现在奇数是4的整数倍,那必定分到一半的奇数到A,所以A必胜
②(奇数的数量%4==1):分类讨论
这里不知道多出来的奇数会分配到A的上面还是B的上面
所以要分类讨论:
1)先手必输:如果n为奇数,此时偶数为偶数个,然后AB刚好可以分配完,所以多出来的奇数分配到A上面,那这种情况A是必输态
2)先手必胜:如果n为偶数,此时偶数为奇数个,B少了一个,正好多余的这一个可以补上
③(奇数的数量%4==2):先手必输(各分配一个)
④(奇数的数量%4==3):先手必胜。A正好变成偶数
下面就是代码了,看代码再理解理解:
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#define IOS ios::sync_with_stdio(false), cin.tie(0);
#include<iostream>
#include<map>
#include<set>
#include<cstdio>
#include<cstring>
#include<vector>
#include<stack>
#include<algorithm>
#include<cmath>
#include<queue>
#include<deque>
using namespace std;
#define int long long
typedef long long ll;
typedef pair<int,int> PAII;
const int N=2e6+10,M=5005,INF=1e18,mod=1e9+7;
int a[N],b[N];
signed main(){//IOS;int T;//T=1;cin>>T;while(T--){int sum = 0;int n;cin>>n;for(int i=1;i<=n;i++){int x;cin>>x;if(x&1) sum++;} if(sum % 4 == 0){cout<<"Alice\n";continue;}if(sum % 4 == 1)//看看这个奇数是分配到谁的上面 {if(n&1) cout<<"Bob\n";else cout<<"Alice\n";continue;}if(sum % 4 == 2){cout<<"Bob\n";continue;}if(sum % 4 == 3){cout<<"Alice\n";continue;}}return 0;
}
/*
博弈论
其实只有奇数才能发挥作用,偶数没有用 */
C. Even Number Addicts相关推荐
- 打表+dp思维+博弈
E. Sending a Sequence Over the Network 应该属于一个经典dp,可惜我没做出来... 思路:对于一个数字来说,它可以向左扩展,也可以向有扩展. 设计状态:f[i]表 ...
- input属性为number,maxlength不起作用的解决方案
<input type="text" maxlength="11" /> 效果ok, 当 <input type="number&q ...
- ORA-19502: write error on file xxxxx, block number xxxx
错误现象: 在ORACLE 10g下为表空间IGNITE_EGVSQL01增加数据文件时,报如下错误: SQL> ALTER TABLESPACE IGNITE_EGVSQL01 AD ...
- LeetCode刷题记录10——434. Number of Segments in a String(easy)
LeetCode刷题记录10--434. Number of Segments in a String(easy) 目录 LeetCode刷题记录9--434. Number of Segments ...
- HDU 1711 Number Sequence(KMP算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Number Sequence Time Limit: 10000/5000 MS (Java/ ...
- LeetCode 191 Number of 1 Bits
LeetCode 191 Number of 1 Bits 解法一(较为传统都解法):使用将n不断右移,并与1想&得到1的个数:(也有使用除法/2的,明显除法的运行效率要低于位移) 时间复杂度 ...
- [BuildRelease]build number / id
build number, 也称为build id, 在build release的流程中唯一标示一个build,也是正式的产品的product version 和file version后两位(Ma ...
- Oracle-ORA-01722 invalid number错误
本来正常的,经过抓包才知道原来是数字型的无意中多了乱码! 本来是3276的居然多了后面一串 3276PuAnrSeU2zliU+IV/FHlnX2Xgia1au2xX2vMWtw http://www ...
- input输入框为number类型时,去掉上下小箭头
input输入框type为number时,去掉上下小箭头,方式如下: <input type="number" ...><style>/* 在Chrome浏 ...
最新文章
- nacos 配置不会动态刷新_Alibaba之Nacos详解
- 关于跨DB增量(增、改)同步两张表的数据小技巧
- Resource is out of sync with the file system解决办法
- 运行adb devices命令后 显示 List of devices attached 无法获取设备解决方法
- 上海校区—给班级女神的Surprise!
- git与svn的区别
- 计算机名字好听的,好听的昵称大全
- No active profile set, falling back to default profiles: default
- R语言1-面板数据分析全过程 附代码用途
- Win10系统默认Administrator账号没有管理员权限的解决方案(win10专业版亲测)
- 真的勇士就要奋战到底!
- Unity 导航系统Navigation
- 电影资源详细信息爬取
- Python 函数 pass
- 方韦——鸦滩的小方韦
- Python3 03 网络爬虫 <下载漫画>
- 洛谷题单 算法1-3 暴力枚举
- 项目管理中的5个关键交付成果
- 京东商城 最具争议的B2C
- json自动美化工具