bzoj1874 [BeiJing2009 WinterCamp]取石子游戏 nim游戏 sg函数
2018-01-16 21:45
477 查看
Description
小H和小Z正在玩一个取石子游戏。 取石子游戏的规则是这样的,每个人每次可以从一堆石子中取出若干个石子,每次取石子的个数有限制,谁不能取石子时就会输掉游戏。 小H先进行操作,他想问你他是否有必胜策略,如果有,第一步如何取石子。对于全部数据,M≤10,Bi≤10
Solution
可以看出是个nim游戏,进而想到博弈,再具体一点就不会了SG函数:
首先定义mex运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数。例如mex{0,1,2,4}=3、mex{2,3,5}=0、mex{}=0。
对于任意状态 x , 定义 SG(x) = mex(S),其中 S 是 x 后继状态的SG函数值的集合。可以形象地理解为一个dag,其中每条边代表一个操作,每个点代表一个状态。x的后继状态即x的所有出点组成的集合,也就是可以变成的所有下一步状态
而当一个点是必输状态,则sg函数异或和一定为0。相反一个点sg函数异或和为0,则为非必胜状态。在这题就是暴力出所有的sg函数的值求异或和判断是否有解。
方案可以通过枚举一个起点,用异或去掉这个起点的影响后再枚举拿走的数量判断能否让后手必输即可
Code
#include <stdio.h> #include <string.h> #define rep(i,st,ed) for (int i=st;i<=ed;++i) #define fill(x,t) memset(x,t,sizeof(x)) const int N=2005; int a ,b ,sg ,rec ; int n,m,sum=0; void get_sg() { rep(i,1,1000) { rep(j,1,m) if (i-b[j]>=0) rec[sg[i-b[j]]]=i; rep(j,0,i) if (rec[j]!=i) { sg[i]=j; break; } } } void init() { scanf("%d",&n); rep(i,1,n) scanf("%d",&a[i]); scanf("%d",&m); rep(i,1,m) scanf("%d",&b[i]); get_sg(); } int main(void) { init(); rep(i,1,n) sum^=sg[a[i]]; if (sum==0) { puts("NO"); return 0; } rep(i,1,n) { int tmp=sum^sg[a[i]]; rep(j,1,m) { if (a[i]>=b[j]) { if (!(tmp^sg[a[i]-b[j]])) { puts("YES"); printf("%d %d", i,b[j]); return 0; } } } } }
相关文章推荐
- BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏 [Nim游戏 SG函数]
- [BZOJ1874][BeiJing2009 WinterCamp]取石子游戏(博弈SG函数)
- BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)
- [BZOJ 1874] [BeiJing2009 WinterCamp] 取石子游戏 【博弈论 | SG函数】
- 【博弈论】【SG函数】【枚举】bzoj1874 [BeiJing2009 WinterCamp]取石子游戏
- [BeiJing2009 WinterCamp] bzoj1874 取石子游戏 [博弈论]
- [BZOJ1874][BeiJing2009 WinterCamp]取石子游戏
- bzoj 1874: [BeiJing2009 WinterCamp]取石子游戏 Nim游戏+SG函数
- [BZOJ1874][BeiJing2009 WinterCamp]取石子游戏
- bzoj 1874 [BeiJing2009 WinterCamp]取石子游戏
- bzoj1874: [BeiJing2009 WinterCamp]取石子游戏
- bzoj 1874: [BeiJing2009 WinterCamp]取石子游戏
- 【BZOJ 1874】 [BeiJing2009 WinterCamp]取石子游戏
- 1874: [BeiJing2009 WinterCamp]取石子游戏 - BZOJ
- BZOJ1874: [BeiJing2009 WinterCamp]取石子游戏
- BZOJ_P1874 [BeiJing2009 WinterCamp]取石子游戏(博弈+SG函数)
- bzoj 1874 取石子游戏 题解 & SG函数初探
- bzoj 1874 取石子游戏 题解 & SG函数初探
- bzoj1874: [BeiJing2009 WinterCamp]取石子游戏 组合游戏
- BZOJ 1228: [SDOI2009]E&D 博弈,SG函数,组合游戏