首页 > 其他分享 >atcoder ARC C 01-Game (博弈, Grundy数)

atcoder ARC C 01-Game (博弈, Grundy数)

时间:2022-10-17 20:45:08浏览次数:96  
标签:两端 01 atcoder 必胜 先手 Game grundy 数是

https://atcoder.jp/contests/arc151/tasks/arc151_c
题意: 有1* n的的网格,有一些位置填有0和1,现在A和B进行游戏,往网格上填0/1,要保证相邻两个格子不能相同。A先手,问最后谁赢。
如果游戏能被划分成n个部分,那么每个部分的Grundy数的异或和为0则后手胜,否则先手胜利。
官方题解:
image
n是一个连续空段的长度
证明:
对于前两种情况: n较小时候可以模拟得到,n较大时候发现:如果两端不同,那么先手放完得到一个两端相同和一个两端不同的状态,那么后手可以操作两端相同的状态把他变成两端不同,这样先手在下一轮又面对两端不同,直到n被分成很小,我们已经知道n很小时候先手输,所以有先手必输,后手必胜grundy数是0;两端相同先手必胜,后继状态后手必胜 grundy数是1.
第三种情况: 容易看出先手必胜,但是grundy数不知道是多少。从n为1开始模拟,发现i+1的后继状态是0-i,那么长度i+1的grundy数是i的grundy数+1.
第四种情况:先手不想输只能往中间放,所以AB一直贴着放,直到没有空位。 grundy数取决于n的奇偶。

标签:两端,01,atcoder,必胜,先手,Game,grundy,数是
From: https://www.cnblogs.com/muscletear/p/16800579.html

相关文章

  • 1010 一元多项式求导(JAVA)
    设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−1。)输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出......
  • 1019 数字黑洞(JAVA)
    给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字。一直重复这样做,我们很快......
  • 1018 锤子剪刀布(JAVA)
    大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。输入格式:输......
  • 1017 A除以B(JAVA)
    本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A=B×Q+R成立。输入格式:输入在一行中依次给出A和B,中间以1空格分......
  • 1016 部分A+B(JAVA)
    正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A=3862767,DA=6,则A的“6部分”PA是66,因为A中有2个6。现给定A、DA、B、DB,请编......
  • 1014 福尔摩斯的约会(JAVA)
    大侦探福尔摩斯接到一张奇怪的字条:我们约会吧!3485djDkxh4hhGE2984akDfkkkkggEdsbs&hgsfdkd&Hyscvnm大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间​​星期四......
  • 1013 数素数(JAVA)
    令Pi表示第i个素数。现任给两个正整数M≤N≤104,请输出PM到PN的所有素数。输入格式:输入在一行中给出M和N,其间以空格分隔。输出格式:输出从PM到PN的所有素数,每......
  • 1012 数字分类(JAVA)
    给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:A1​=能被5整除的数字中所有偶数的和;A2​=将被5除后余1的数字按给出顺序进行交错求和,即计算n1​−n......
  • 1011 A+B 和 C(JAVA)
    给定区间[−231,231]内的3个整数A、B和C,请判断A+B是否大于C。输入格式:输入第1行给出正整数T(≤10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给......
  • 1011 A+B 和 C(JAVA)
    给定区间[−231,231]内的3个整数A、B和C,请判断A+B是否大于C。输入格式:输入第1行给出正整数T(≤10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给......