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相关推荐

  1. 打表+dp思维+博弈

    E. Sending a Sequence Over the Network 应该属于一个经典dp,可惜我没做出来... 思路:对于一个数字来说,它可以向左扩展,也可以向有扩展. 设计状态:f[i]表 ...

  2. input属性为number,maxlength不起作用的解决方案

    <input type="text" maxlength="11" /> 效果ok, 当 <input type="number&q ...

  3. ORA-19502: write error on file xxxxx, block number xxxx

    错误现象: 在ORACLE 10g下为表空间IGNITE_EGVSQL01增加数据文件时,报如下错误: SQL> ALTER TABLESPACE IGNITE_EGVSQL01      AD ...

  4. 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 ...

  5. HDU 1711 Number Sequence(KMP算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Number Sequence Time Limit: 10000/5000 MS (Java/ ...

  6. LeetCode 191 Number of 1 Bits

    LeetCode 191 Number of 1 Bits 解法一(较为传统都解法):使用将n不断右移,并与1想&得到1的个数:(也有使用除法/2的,明显除法的运行效率要低于位移) 时间复杂度 ...

  7. [BuildRelease]build number / id

    build number, 也称为build id, 在build release的流程中唯一标示一个build,也是正式的产品的product version 和file version后两位(Ma ...

  8. Oracle-ORA-01722 invalid number错误

    本来正常的,经过抓包才知道原来是数字型的无意中多了乱码! 本来是3276的居然多了后面一串 3276PuAnrSeU2zliU+IV/FHlnX2Xgia1au2xX2vMWtw http://www ...

  9. input输入框为number类型时,去掉上下小箭头

    input输入框type为number时,去掉上下小箭头,方式如下: <input type="number" ...><style>/* 在Chrome浏 ...

最新文章

  1. nacos 配置不会动态刷新_Alibaba之Nacos详解
  2. 关于跨DB增量(增、改)同步两张表的数据小技巧
  3. Resource is out of sync with the file system解决办法
  4. 运行adb devices命令后 显示 List of devices attached 无法获取设备解决方法
  5. 上海校区—给班级女神的Surprise!
  6. git与svn的区别
  7. 计算机名字好听的,好听的昵称大全
  8. No active profile set, falling back to default profiles: default
  9. R语言1-面板数据分析全过程 附代码用途
  10. Win10系统默认Administrator账号没有管理员权限的解决方案(win10专业版亲测)
  11. 真的勇士就要奋战到底!
  12. Unity 导航系统Navigation
  13. 电影资源详细信息爬取
  14. Python 函数 pass
  15. 方韦——鸦滩的小方韦
  16. Python3 03 网络爬虫 <下载漫画>
  17. 洛谷题单 算法1-3 暴力枚举
  18. 项目管理中的5个关键交付成果
  19. 京东商城 最具争议的B2C
  20. json自动美化工具

热门文章

  1. VMware Guest customization fails on Linux
  2. KNN(k近邻算法)实例之医用判断良性恶性肿瘤
  3. filetype判断文件类型
  4. Morgan Stanley
  5. IIS突然启动不了,居然是Web迅雷倒的鬼!
  6. shopex各文件路径
  7. Windows 10资源管理器经常无故自动重启
  8. 邮件服务器过滤,Winmail 邮件服务器软件
  9. mmorpg 游戏服务器设计
  10. 运放稳定性连载6:RO与ROUT(1)