2020ICPC 博弈题 纳新一百的石子游戏
https://ac.nowcoder.com/acm/contest/4010/C
这道题为尼姆博弈的其中一种裸类型;
要求求出前(1~n)堆的必胜方案。
对于这种类型,假如我们现在就前k堆,那么我们先异或出前k堆的异或值;
然后再对k堆中的每一项进行下列操作: tmp=sum^a[i] ,假如总的异或值异或第i项得出的值小于a[i];则方案数+1;
但是这种方法复杂度为n^2;
所以我们需要将前k堆每一项值都用二进制保留下来;
然后枚举到总的异或值的最高位的下标,然后在该下标所保存有多少个数,即为多少种方案;
为什么呢,因为假如总的异或值能够异或到这一位的话,证明该总的异或值与该下标保存着的任意一个a[i]异或,都会小于a[i],因为两者该为都为1;
总的异或值异或之后就变为0,所以肯定比a[i]小;
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+;
typedef long long ll;
ll a[maxn],num[maxn],sum=;
int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;++i){
scanf("%lld",&a[i]);
sum^=a[i];
for(int j=;j<;++j){
if((a[i]>>j)&) num[j]++;
}
if(sum==){
printf("0\n");
continue;
}
ll t=sum,cnt=-;
while(t) cnt++,t>>=;
printf("%lld\n",num[cnt]);
}
return ;
}
2020ICPC 博弈题 纳新一百的石子游戏的更多相关文章
- Wannafly Camp 2020 Day 2C 纳新一百的石子游戏
为什么为了这么个简单题发博客呢? 因为我又因为位运算运算符优先级的问题血了 #include <bits/stdc++.h> using namespace std; #define in ...
- 【博弈】【HDU】取石子游戏
取石子游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- 「LuoguP2252」 取石子游戏(威佐夫博弈
[P2252]取石子游戏 - 洛谷 题目背景 无 题目描述 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以 ...
- HDU 2516 取石子游戏(斐波那契博弈)
取石子游戏 Time Limit: 2000/1000 MS(Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- HDU2177:取(2堆)石子游戏(威佐夫博弈)
Problem Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同 ...
- 取石子游戏(hdu1527 博弈)
取石子游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- [BZOJ1115][POI2009]石子游戏Kam解题报告|阶梯博弈
有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏.问先手是否必胜. 首先 ...
- poj1067-取石子游戏 (威佐夫博弈)
http://poj.org/problem?id=1067 取石子游戏 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 36 ...
- hdu1527取石子游戏(威佐夫博弈)
取石子游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
随机推荐
- LOJ #6402. yww 与校门外的树 多项式求逆
蛮神的一道题. code: #include <cmath> #include <cstring> #include <algorithm> #include &l ...
- matplotlib调整子图大小
因为子图太多而导致每个子图很小,很密,如何调整
- C语言输出杨辉三角形
// 打印杨辉三角: 行 + 列 ][] = { }; // 1. 确定要打印的行数: 13(n) ; i < ; ++i) { // 2. 确定列数:杨辉三角 行 == 列 ; j <= ...
- win10中安装与配置maven
原文链接:https://www.cnblogs.com/wkrbky/p/6350334.html Maven安装配置(Windows10) 想要安装 Apache Maven 在Windows 系 ...
- centos8 samba
安装dnf install -y samba samba-client开机启动systemctl enable smb立即启动systemctl start smb防火墙放行firewall-cmd ...
- 自定义Redux
实现mini版redux 1. 理解redux模块 1). redux模块整体是一个对象模块 2). 内部包含几个函数 createStore(reducers) // reducers: funct ...
- Qt Installer Framework翻译(8)
好了,到这里翻译就结束了.各位可以下载源码,结合examples示例,使用repogen和binarycreator好好实操一下,就能掌握基础用法了.祝各位使用顺利. 官方文档网址:https://d ...
- python开发第四篇:函数(1)
函数 阅读目录 一 函数知识体系 二 函数基础 三 函数对象.函数嵌套.名称空间与作用域.装饰器 四 迭代器.生成器.面向过程编程 五 三元表达式.列表推导式.生成器表达式.递归.匿名函数.内置函数 ...
- 1304F2 - Animal Observation (hard version) 线段树or单调队列 +DP
1304F2 - Animal Observation (hard version) 线段树or单调队列 +DP 题意 用摄像机观察动物,有两个摄像机,一个可以放在奇数天,一个可以放在偶数天.摄像机在 ...
- vue 截取字符串
let str = 'abcdef'; str = str.slice();//返回整个字符串 abcdef str = str.substring();//返回整个字符串 abcdef str = ...