BZOJ1188 [HNOI2007]分裂游戏(SG函数)】的更多相关文章

传送门 拿到这道题就知道是典型的博弈论,但是却不知道怎么设计它的SG函数.看了解析一类组合游戏这篇论文之后才知道这道题应该怎么做. 这道题需要奇特的模型转换.即把每一个石子当做一堆石子,且原来在第i堆的石子(从0开始标号)的石子个数为n-i-1,这样题目就转化成了每次取一堆石子,并放回两个比这一堆的石子个数少的石堆.这样,我们就可以有序的递推sg函数值了. 即: sg(i)=mex({sg[j]  xor  sg[k]}) 其中j≤i且k≤i #include <cstdio> #define…
[HNOI2007]分裂游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1394  Solved: 847[Submit][Status][Discuss] Description 聪聪和睿睿最近迷上了一款叫做分裂的游戏.该游戏的规则试:共有n个瓶子,标号为0,1,2.....n-1,第i个瓶子中 装有p[i]颗巧克力豆,两个人轮流取豆子,每一轮每人选择3个瓶子.标号为i,j,k,并要保证i<j,j<=k且第i个瓶子 中至少要有1颗巧克力豆…
题意 有n个格子,标号为0 ~ n-1,每个格子上有若干石子,每次操作可以选一个0 ~ n-2的格子上的一颗石子,分裂为两颗,然后任意放在后面的两个格子内,这两个格子可以相同.求使先手必胜的第一步的方案数以及最小字典序的方案. 分析 每一个石子都是独立的,所以考虑某一位上的一颗石子的SG函数,再异或起来就行了.实际上只用异或石子数为奇数的,因为偶数个石子异或两次相当于没有异或. 我们先把位置反向并从1~n标号,也就是最后边是1,最左边是n.这样就能对不同的n用同样的SG函数 那么对于位置iii,…
题目链接 给n个位置, 每个位置有一个小球. 现在两个人进行操作, 每次操作可以选择一个位置i, 拿走一个小球.然后在位置j, k(i<j<=k)处放置一个小球. 问你先进行什么操作会先手必胜以及方法数量. 感觉这题好神 如果一个位置有偶数个小球, 那么等价于这个位置没有小球. 因为第二个人可以进行和第一个人相同的操作. 所以初始值%2. 然后我们把每个位置看成一个状态, 如果i有一个小球, 等价于j, k 也有一个小球. 然后转移. 方法数量就n^3枚举就可以了. #include <…
1188: [HNOI2007]分裂游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 973  Solved: 599[Submit][Status][Discuss] Description 聪聪和睿睿最近迷上了一款叫做分裂的游戏. 该游戏的规则试: 共有 n 个瓶子, 标号为 0,1,2.....n-1, 第 i 个瓶子中装有 p[i]颗巧克力豆,两个人轮流取豆子,每一轮每人选择 3 个瓶子.标号为 i,j,k, 并要保证 i < j ,…
分裂游戏 bzoj-1188 HNOI-2007 题目大意:题目链接. 注释:略. 想法: 我们发现如果一个瓶子内的小球个数是奇数才是有效的. 所以我们就可以将问题变成了一个瓶子里最多只有一个球球. 设$sg(x)$表示位置为$x$的小球的$sg$值. 显然通过$n^2$暴力转移即可. 求出了所有点的$sg$值之后,把所有有奇数个小球的位置用$SG$定理异或起来即可啦. Code: #include <iostream> #include <cstdio> #include <…
因为第i个瓶子里的所有豆子都是等价的,设sg(i)表示第i个瓶子的sg值,可以转移到sg(j)^sg(k)(i<j<n,j<=k<n)的状态. 只需要考虑豆子数是奇数的瓶子啦,因为如果豆子数是偶数,重复异或是没有意义的. 对于方案数什么的……枚举就好了. #include<cstdio> #include<cstring> #include<set> using namespace std; int T,n,a[21],SG[21]; int s…
Description 聪聪和睿睿最近迷上了一款叫做分裂的游戏. 该游戏的规则试: 共有 n 个瓶子, 标号为 0,1,2.....n-1, 第 i 个瓶子中装有 p[i]颗巧克力豆,两个人轮流取豆子,每一轮每人选择 3 个瓶子.标号为 i,j,k, 并要保证 i < j , j < = k 且第 i 个瓶子中至少要有 1 颗巧克力豆,随后这个人从第 i 个瓶子中拿走一颗豆 子并在 j,k 中各放入一粒豆子(j 可能等于 k) .如果轮到某人而他无法按规则取豆子,那么他将输 掉比赛.胜利者可以…
Description 聪聪和睿睿最近迷上了一款叫做分裂的游戏.该游戏的规则试:共有n个瓶子,标号为0,1,2.....n-1,第i个瓶子中装有p[i]颗巧克力豆,两个人轮流取豆子,每一轮每人选择3个瓶子. 标号为i,j,k,并要保证i<j,j<=k且第i个瓶子中至少要有1颗巧克力豆,随后这个人从第i个瓶子中拿走一颗豆子并在j,k中各放入一粒豆子(j可能等于k). 如果轮到某人而他无法按规则取豆子,那么他将输掉比赛.胜利者可以拿走所有的巧克力豆! 两人最后决定由聪聪先取豆子,为了能够得到最终的…
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1188 分析: 设SG[i]表示一个石子在位置i上的SG值 这个很容易暴力求,因为i的后继状态肯定是所有的(j,k),其后继状态的SG值就是SG[j]^SG[k] 然后整个游戏的SG值就是SG[1]^SG[1]^SG[1]^...^SG[2]^SG[2]^......也就是说一个堆有多少个石子就要异或多少下. 因为异或的特殊性质,所以如果一个堆的石子个数是偶数,那么就是偶数个同样的数相…