木屋

mhlwsk的博客


  • 首页

  • 关于

  • 标签

  • 归档

  • 搜索

CodeForces 603C (Lieges of Legendre)[公平组合博弈,SG函数]

发表于 2018-08-19 | 更新于 2020-07-30 |

题目链接:http://codeforces.com/problemset/problem/603/C

这题是公平组合博弈。对于给定的每堆奶牛,有两种操作,一是减少一只奶牛,二是将奶牛减半并变成k堆。其实第二种操作就相当于游戏分成了许多子游戏,子游戏的SG异或和仍然对应游戏的SG值。
这题最关键的思路是要想到k分奇偶讨论,然后打表找一下规律。

如果k是偶数

当选择2时,有k个n个石子的小堆,状态的sg函数显然为f(n) xor自身 k次=0。
此时我们可以计算得出f(0..4)={0,1,2,0,1},并且可证明对于n>=2,有f(2n-1)=0,f(2n)=1,化简得f(n)=1-(n%2),或f(n)=n&1^1。
对于f(2n-1),我们只能移动到2n-2个石子的状态(游戏1),又f(2n-2)=1>0,所以f(2n-1)=mex{1}=0。
对于f(2n),可以移动到2n-1的状态(游戏1),或者游戏2,游戏1和2的sg函数值都为0,所以f(2n)=mex{0}=1。

如果k是奇数

此时对于2n个石子的石堆,状态的sg函数为f(n)xor自身k次=f(n)。推导出f(0..5)={0,1,0,1,2,0}。可证明对于n>=2,f(2n)>0,f(2n+1)=0。
对于f(2n+1),我们只能移动到2n,有f(2n)>0,所以f(2n+1)=0。
对于f(2n),可以移动到2n-1,f(2n-1)=0,所以f(2n)>0。且f(2n)=mex{f(2n-1),f(n)}=mex{0,f(n)},递归计算即可。
引用自huanghongxun的博客

阅读全文 »

HDU1848 (Fibonacci again and again)[公平组合博弈,SG函数]

发表于 2018-08-19 | 更新于 2020-07-30 |

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1848

尼姆游戏变型,每次每堆石子只能取走斐波那契数个石子。
打一个SG表,SG值为0的为P局势,SG值为1的为N局势。判断三堆石子的SG值异或和即可。

阅读全文 »

HDU2147 (kiki's game)[博弈论,打表]

发表于 2018-08-19 | 更新于 2020-07-30 |

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2147

这题可以用打表的方式找出规律。令矩阵左下角为P局势递推,所有能到达P局势的为N局势,所有到达不了P局势只能到N局势的为P局势,就可以发现偶数列全是先手必胜,奇数列的偶数行为先手必胜。

阅读全文 »

HDU2177 取(2堆)石子游戏[威佐夫博弈]

发表于 2018-08-19 | 更新于 2020-07-30 |

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2177

这题是需要输出第一步策略的威佐夫博弈,首先打表求出范围内所有奇异局势(ak=k*(1+sqrt(5))/2), bk=ak+k),然后二分判断给定局势是否为奇异局势,如果不是,那么根据bk=ak+k的性质,可以令m-n=k并算出这个k对应的ak和bk,这就是m和n同时减去一个数对应的局势。然后分别模拟n减去一个值或m减去一个值的情况,并在表中查找对应的局势即可(需要注意m减去一个值后可能会小于n)。

阅读全文 »

HDU4280 (Island Transport)[网络流]

发表于 2018-08-16 | 更新于 2020-07-30 |

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4280

这题是一道比较裸的网络流题,需要注意的是每条航线是双向的,连边时需要加上反向边。
另外这题非常卡时间,我用dinic超时了,换成了ISAP。

阅读全文 »

POJ2391 (Ombrophobic Bovines)[网络流,二分,Floyd]

发表于 2018-08-16 | 更新于 2020-07-30 |

题目链接:http://poj.org/problem?id=2391

这题一开始想成了费用流,不过应该有些细节没考虑到,一直WA。
这题的做法是二分网络流,先用Floyd预处理出任意两个结点的距离,二分这个距离,在跑最大流时只走小于这个距离的边,找到最大流能等于奶牛数的最小距离即可。
有个细节需要注意,结点是需要拆成入点和出点的,超级源向入点连边,出点向超级汇点连边,出点向入点连距离为最小距离容量为INF的边,这样能防止一些比较奇怪的问题,比如最小距离叠加到新的最小距离上了。

阅读全文 »

POJ3281 (Dining)[网络流]

发表于 2018-08-16 | 更新于 2020-07-30 |

题目链接:http://poj.org/problem?id=3281

这题第一眼看上去有点像二分图匹配,奶牛和他们所喜欢的食物饮料匹配,但是这题的食物和饮料作为两种限制条件不好处理。一种用网络流的建图方式是从超级源点向食物连边,从饮料向超级汇点连边,奶牛放在中间,这样一条可行流就是超级源->食物->奶牛->饮料->超级汇,从而保证了每种食物和饮料都各自只能占用一次,奶牛一次只能占用一种食物和一种饮料,因此我们把每头奶牛拆成一个容量为1的边即可。

这样这种有两个限制条件的匹配图,就可以通过把待匹配项放到图两边的方式来解决。

阅读全文 »

UVALive3523 (Knights of the Round Table)[点双连通分量]

发表于 2018-08-16 | 更新于 2020-07-30 |

题目链接

本题可以转化为求不在任何一个简单奇圈上的结点个数。
简单圈上的所有结点必然属于一个点双连通分量。因此需要先找出所有双连通分量,二分图是没有奇圈的,因此我们只需要关注那些不是二分图的双连通分量,可以证明这些双连通分量一定都在某个奇圈上。
对于每个连通分量的每个双连通分量B,若它不是二分图,给B中所有结点标记为“在奇圈上”。注意,由于每个割顶属于多个双连通分量,它可能被标记多次。
引用自刘汝佳《算法竞赛入门经典 训练指南》

阅读全文 »

HDU3836 (Equivalent Sets)[强连通]

发表于 2018-08-16 | 更新于 2020-07-30 |

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3836

题目大意:给定一些命题,以及一部分命题的推导关系,问还需要至少添加几个推导关系能让所有的命题可以互相证明。

首先找出强连通分量,然后把每个强连通分量缩成一个点,得到一个DAG。接下来,设有a个结点(这里的结点对应于原图的一个强连通分量)的入度为0,b个结点的出度为0,则max{a,b}就是答案。注意特殊情况:当原图已经强连通时,答案是0而不是1。
引用自刘汝佳《算法竞赛入门经典 训练指南》

阅读全文 »

HDU3729 (I'm Telling the Truth)[二分图匹配,匈牙利算法]

发表于 2018-08-14 | 更新于 2020-07-30 |

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3729

这题比较直观的想法是从学生向区间中的每一个名次连边,形成一张二分图,问题转化为求二分图最大匹配。
比较麻烦的是需要输出字典序最大的情况,这里需要注意的是匈牙利算法枚举时要倒着搜。

阅读全文 »
1…567…13
mhlwsk

mhlwsk

I will persist until I win.

130 日志
80 标签
RSS
GitHub E-Mail
Links
  • 离光
© 2017 – 2020 mhlwsk
由 Hexo 强力驱动
|
主题 – NexT.Pisces