【BZOJ】3576: [Hnoi2014]江南乐
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3576
很显然,这是一个multi-nim游戏。
注意:1.一个点的SG值就是一个不等于它的后继点的SG的且大于等于零的最小整数。(mex)
2.主游戏的SG值等于所有子游戏的异或和
所以区分好主游戏和后继点的区别。
一开始多个石子堆组合起来形成了一个主游戏。
一个石子堆可以分为多个石子堆,每一种分发构成了一个主游戏,这些主游戏的异或和构成的当前这个点(状态)的SG函数。
显然有一个${m^{2}}$做法,即记忆化搜索SG函数。
考虑${x/i}$只有$\sqrt{n}$种取值,再考虑一下它们的奇偶性,然后分块来做。
70Code:
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<vector> 5 #include<cstdlib> 6 #include<cmath> 7 #include<cstring> 8 using namespace std; 9 #define maxn 100100 10 #define llg long long 11 #define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout); 12 llg n,m,bj[maxn],sg[maxn],T,F,a[maxn]; 13 14 llg dp(llg x) 15 { 16 if (bj[x]) return sg[x]; 17 bj[x]=1; 18 sg[x]=0; 19 bool e[maxn]; 20 memset(e,0,sizeof(e)); 21 for (llg m=2;m<=x;m++) 22 { 23 llg v1=m-x%m,v2=x%m; 24 llg nsg=0; 25 if (v1&1) nsg^=dp(x/m); 26 if (v2&1) nsg^=dp(x/m+1); 27 e[nsg]=1; 28 } 29 for (llg i=0;1;i++) if (!e[i]) {sg[x]=i; return sg[x];} 30 } 31 32 int main() 33 { 34 yyj("game"); 35 cin>>T>>F; 36 for (llg i=0;i<F;i++) bj[i]=1; 37 while (T--) 38 { 39 scanf("%lld",&n); 40 llg ans=0; 41 for (llg i=1;i<=n;i++) 42 { 43 scanf("%lld",&a[i]); 44 ans^=dp(a[i]); 45 } 46 if (ans) printf("1");else printf("0"); 47 if (T) printf(" "); 48 } 49 return 0; 50 }
100Code:
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<vector> 5 #include<cstdlib> 6 #include<cmath> 7 #include<cstring> 8 using namespace std; 9 #define maxn 100100 10 #define llg int 11 #define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout); 12 llg n,m,bj[maxn],sg[maxn],T,F,a[maxn]; 13 14 llg dp(llg x) 15 { 16 if (bj[x]) return sg[x]; 17 bj[x]=1; 18 sg[x]=0; 19 bool e[maxn]; 20 memset(e,0,sizeof(e)); 21 for (llg m=2,j=0;m<=x;m=j+1) 22 { 23 j=x/(x/m); 24 llg v1=m-x%m,v2=x%m,cnt=j-m+1; 25 llg nsg=0; 26 if (v1&1) nsg^=dp(x/m); 27 if (v2&1) nsg^=dp(x/m+1); 28 e[nsg]=1; 29 if (cnt>=2) 30 { 31 nsg=0; 32 if (((m+1)-x%(m+1))&1) nsg^=dp(x/(m+1)); 33 if ((x%(m+1))&1) nsg^=dp(x/(m+1)+1); 34 e[nsg]=1; 35 } 36 } 37 for (llg i=0;1;i++) if (!e[i]) {sg[x]=i; return sg[x];} 38 } 39 40 int main() 41 { 42 yyj("game"); 43 cin>>T>>F; 44 for (llg i=0;i<F;i++) bj[i]=1; 45 while (T--) 46 { 47 scanf("%d",&n); 48 llg ans=0; 49 for (llg i=1;i<=n;i++) 50 { 51 scanf("%d",&a[i]); 52 ans^=dp(a[i]); 53 } 54 if (ans) printf("1");else printf("0"); 55 if (T) printf(" "); 56 } 57 return 0; 58 }
转载于:https://www.cnblogs.com/Dragon-Light/p/6411602.html
【BZOJ】3576: [Hnoi2014]江南乐相关推荐
- 【bzoj3576】 Hnoi2014—江南乐
http://www.lydsy.com/JudgeOnline/problem.php?id=3576 (题目链接) 题意 给出一个数$F$,然后$n$堆石子,每次操作可以把一堆不少于$F$的石子分 ...
- Bzoj3576 [Hnoi2014]江南乐
Time Limit: 30 Sec Memory Limit: 512 MB Submit: 1555 Solved: 552 Description 小A是一个名副其实的狂热的回合制游戏玩家. ...
- BZOJ 3576 江南乐
http://www.lydsy.com/JudgeOnline/problem.php?id=3576 思路:由于数字巨大,因此N^2异或做法是过不了的,我们考虑将n个石子分成i堆,那么会有n%i堆 ...
- BZOJ 3571: [Hnoi2014]画框
3571: [Hnoi2014]画框 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 996 Solved: 561 [Submit][Status ...
- 虚树(bzoj 3572: [Hnoi2014]世界树)
例题: 一棵n个节点的树,m次查询,每次查询给你一个点集U,对于树上的所有节点x(x∉U),你要找到一个点y(y∈U)满足y点离x点最近且标号最小,表示x点受y点管辖,而你的任务就是对于每次查询输出U ...
- BZOJ 3573 [HNOI2014]米特运输
题目链接:传送门 冗长冗长的题面: 3573:[HNOI2014]米特运输3573: [HNOI2014]米特运输3573:[HNOI2014]米特运输 Description 米特是D星球上一种非常 ...
- bzoj 3572 [Hnoi2014]世界树——虚树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3572 关于虚树:https://www.cnblogs.com/zzqsblog/p/556 ...
- P3235-[HNOI2014]江南乐【整除分块,SG函数】
正题 题目链接:https://www.luogu.com.cn/problem/P3235 题目大意 TTT组游戏,固定给出FFF.每组游戏有nnn个石头,每次操作的人可以选择一个数量不少于FFF的 ...
- 【BZOJ3576】江南乐,博弈
传送门 思路: 很厉害的一道博弈 虽说是暴力求SG函数,但是要加入分块优化 如果说直接按照规则求的话是O(n2)O(n^2)的 (这也是我会的--) 但是注意到⌊ni⌋⌊\frac n i⌋这个神奇的 ...
- BZOJ.3575.[HNOI2014]道路堵塞(最短路 动态SPFA)
题目链接 \(Description\) 给你一张有向图及一条\(1\)到\(n\)的最短路.对这条最短路上的每条边,求删掉这条边后\(1\)到\(n\)的最短路是多少. \(Solution\) 枚 ...
最新文章
- stdafx.h头文件
- 使用 Docker 部署 Spring Boot 项目
- JAVA反射使用手记
- C/C 代码规范注释有哪些讲究?
- 音频自动增益 与 静音检测 算法 附完整C代码
- Elasticsearch安装-源码
- Android ListView优化
- 基于Matlab高斯光束菲涅耳衍射的模拟
- 鼎捷易飞ERP视频教程-金速鹏-专题视频课程
- 设计院中心所工作流程 CAD广播电视工程工艺绘图
- 如何搭建远程访问服务器?外网访问数据库实操教程
- 深度学习图像分类数据集制作
- Spring Security完成安全认证
- linux a卡怎么切换n卡,手把手教您win10系统a卡切换独显的具体办法
- Zookeeper 3.5.7学习记录(一)——集群的坑
- Guessing the Greatest (hard version)-(交互+二分+思维)
- 打开计算机网络自动连接怎么回事,win10系统电脑连接宽带后会自动打开Bing网页怎么办...
- rtk服务器协议,南方rtk服务器地址和端口
- 大内存PDF文件转Word免费之道
- Linux的LVM磁盘卷轴深度学习