[CSAcademy]Exponential Game
题目大意:
		  有n堆石子,A和B两人轮流进行操作:
			  取走任意一堆石子,若这堆石子的个数是x个,那么可以放入x-1堆数量为0~x-1的石子。
		  不能操作者负。
思路:
		  将每一堆石子作为一个子游戏,将石子的数量作为游戏状态。
		  sg(x)=mex{sg(y)|y为x的后继状态}
		  然而后继状态有很多,暴力构造肯定会超时。
		  考虑找规律。
		  sg(0)=0 sg(1)=1 sg(2)=2 sg(3)=4 sg(4)=8 ...
		  发现sg(x)=2^(x-1)。
		  为什么?
		  当x=0时,无法进行操作,显然为必败状态;
		  当x=1时,sg(x)=mex{sg(0)};
		  当x=2时,sg(x)=mex{sg(0),sg(1)};
		  当x=3时,sg(x)=mex{sg(0),sg(1),sg(2),sg(1 1),sg(2 2),sg(1 2)},其中sg(1 2)=3;
		  ……
		  发现2^0,2^1,...,2^k-1的数能异或出小于2^k的所有数。
  然而x<=1e9,2^x-1似乎要高精度?
  事实上我们发现每个SG值只有1位是1,其余位都是0,
  那么我们可以用一个set记录出现过的位,异或的时候只需要把有的去掉,没的加进来就可以了,由于n<=1e5,显然存得下。
#include<cstdio>
#include<cctype>
#include<ext/hash_set>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
__gnu_cxx::hash_set<int> sg;
int main() {
for(register int T=getint();T;T--) {
sg.clear();
for(register int n=getint();n;n--) {
const int x=getint()-;
if(sg.count(x)) {
sg.erase(x);
} else {
sg.insert(x);
}
}
puts(sg.empty()?"B":"A");
}
return ;
}
[CSAcademy]Exponential Game的更多相关文章
- 基本概率分布Basic Concept of Probability Distributions 6: Exponential Distribution
		PDF version PDF & CDF The exponential probability density function (PDF) is $$f(x; \lambda) = \b ... 
- [MCSM]Exponential family: 指数分布族
		Exponential family(指数分布族)是一个经常出现的概念,但是对其定义并不是特别的清晰,今天好好看了看WIKI上的内容,有了一个大致的了解,先和大家分享下.本文基本是WIKI上部分内容的 ... 
- Project Euler 99:Largest exponential 最大的幂
		Largest exponential Comparing two numbers written in index form like 211 and 37 is not difficult, as ... 
- EMA计算的C#实现(c# Exponential Moving Average (EMA) indicator )
		原来国外有个源码(TechnicalAnalysisEngine src 1.25)内部对EMA的计算是: var copyInputValues = input.ToList(); for (int ... 
- Exponential notation
		Exponential notation You are given a positive decimal number x. Your task is to convert it to the &q ... 
- CSAcademy Beta Round #5 Force Graph
		题目链接:https://csacademy.com/contest/arhiva/#task/force_graph/ 大意是有若干个节点,每个节点对应一个二维坐标,节点之间相互有斥力存在.同时有些 ... 
- CSAcademy Beta Round #5 Long Journey
		题目链接:https://csacademy.com/contest/arhiva/#task/long_journey/ 大意是有一张无向不带权的图,两个人同时从s点出发,分别前往a点和b点,且每个 ... 
- CSAcademy Beta Round #4 Swap Pairing
		题目链接:https://csacademy.com/contest/arhiva/#task/swap_pairing/ 大意是给2*n个包含n种数字,每种数字出现恰好2次的数列,每一步操作可以交换 ... 
- 理解滑动平均(exponential moving average)
		1. 用滑动平均估计局部均值 滑动平均(exponential moving average),或者叫做指数加权平均(exponentially weighted moving average),可以 ... 
随机推荐
- 去除IE10+上文本框巨丑无比的删除图标以及显示密码图标
			去除IE10+上文本框巨丑无比的删除图标以及显示密码图标 IE浏览器总是让人喜欢让人厌,在最新的IE浏览器(IE10+)上使用表单时,文本框内后面会出现很巨丑无比的“删除图标”以及“显示密码图标”,如 ... 
- CentOS7防火墙fiewall用法
			CentOS7与以前常用的CentOS6还是有一些不同之处的,比如在设置开放端口的时候稍许有些不同,常用的iptables命令已经被 firewalld代替.这几天正好有在CentOS7系统中玩Sea ... 
- PEB及LDR链
			PEB地址的取得在NT内核系统中fs寄存器指向TEB结构,TEB+0x30处指向PEB结构,PEB+0x0c处指向PEB_LDR_DATA结构,PEB_LDR_DATA+0x1c处存放一些指向动态链接 ... 
- fastDFS 命令笔记【转】
			端口开放 这是命令运行的前提 iptables -I INPUT -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT iptables -I I ... 
- $fhqTreap$
			- $fhqTreap$与$Treap$的差异 $fhqTreap$是$Treap$的非旋版本,可以实现一切$Treap$操作,及区间操作和可持久化 $fhqTreap$非旋关键在于分裂与合并$(Sp ... 
- 安装 Xamarin for Visual Studio
			总得来说,Xamarin 有“联网自动安装”和“手动安装”两种方式. 说明:本文涉及得资源链接都是官网的,同时,在 我的网盘 也有相关备份. 现在,我就以 Windows 为例来大概说明……(-=-我 ... 
- c/c++中static用法总结
			static的作用主要有两种: 第一个作用是限定作用域:第二个作用是保持变量内容持久化: c语言中static的用法: 1.全局静态变量: 用法:在全局变量前加上关键字static,全局变量就定义成一 ... 
- 《跟老齐学Python Django实战》读后感
			1.说一下这本书,讲解的很细致,内容选取足够入门Django. 2.在学习这本书要注意的几点: <1>如果你想跟着敲这本书的代码必须要安装:Django版本1.10.1(当然也可以玩玩新版 ... 
- 一致性hash理解
			在做memcached分布式集群时往往要用到一致性hash算法来调节缓存数据的分布. 通常的hash算法是以服务器数量N作为模数,使用key%N的值来获得最终位置,显然当服务器数量发生变化即N发生变化 ... 
- falsk注册etcd
			部署web服务集群时,我们希望能动态调整集群大小.当一个新的节点启动时,可以将自己的信息注册给master, 让master把它加入到集群里, 关闭之后也可以把自己从集群中删除.我这里使用的是flas ... 
