首页 > 其他分享 >【题解】Codeforces 1942E - Farm Game

【题解】Codeforces 1942E - Farm Game

时间:2024-04-01 12:34:08浏览次数:50  
标签:盒子 必胜 Farm 题解 距离 偶数 先手 Game 必败

题目链接:https://codeforces.com/contest/1942/problem/E

题目大意:输入一个 \(l\) 和一个 \(n\) ,其中 \((1\leq l \leq 10^6, 2n <= l)\) ,表示有 \(l\) 个不同的空位(分别是 \([1, l]\) )和 \(2n\) 头完全一样的牛。Alice 和 Bob 分别有 \(n\) 头牛,并且他们的牛是间隔排列的。每一次操作,玩家可以选择任意头自己的牛,然后选择一个方向(左或者右),然后被选择的牛统一移动到该方向上距离为1的一个空位上。注意牛不能超过边界也不能穿过另一个人的牛。求有多少种排列牛的方式使得 Alice 必胜。

题目分析:一般来说,这一类组合博弈的游戏先手都是有巨大优势的,因为如果能找到一个必败状态,先手可以有机会通过一次操作把当前状态转化成必败状态然后交给后手。一般来说,必败状态必定满足某一些特殊的恒等式,先手玩家破坏这个必败状态,而后手玩家必定能找到一个方法回到必败状态(一般来说是直接模仿对方操作,举例来说对于NIM游戏,先手必败的状态的异或和为0,先手从任意堆中取若干石子之后异或和从0变成非0,后手要构造一种方法让异或和重新变成0,要做的是证明后手总能如此构造)。对于这道题来说,可以只关心对应的两头牛之间的距离,因为如果不对应的两头牛之间的距离影响答案的话,如果是先手必败,并且先手任选了其中的一些牛往扩大对应的牛之间的距离的方向移动,那么后手只需要重复该操作使得牛之间的距离恢复成原貌即可;如果是先手必胜,那么先手不去移动两头牛之间的距离,只去做一些别的(容易证明只有对应牛之间的距离都为0才不能去做别的,这种情况由模仿策略可知先手必败,与假设先手必胜矛盾),然后把当前状态转移给后手就可以维持必胜。

所以只考虑对应的牛之间的距离,并且只能减少。

问题变成了:有n堆可能为空的石子,先手可以选其中任意堆各取1颗石子,如果所以堆都是空的则先手败。由于每个堆互相独立并且先后手交替操作并且每次只能减少至多1,很容易往奇偶性去想。首先全部都是空的时候是先手必败,然后如果有若干堆是1的其他都是0,那么先手把他们拿走就必胜了,故如果有1的堆就是必胜态,维持必胜的策略是不是让每一堆都变成偶数呢?简单想了想如果当前所有的堆都是偶数,那么进行操作之后至少有一堆是奇数,然后另一个人肯定可以操作回来让所有的堆维持回偶数,直到变成全部为0的必败态。所以全部为偶数容易知道是先手必败态。那么其他的一定是先手必胜态吗?只需要证明其他的状态(有至少一堆为奇数)进行一次操作就能回到必败态即可,结果是显然的。

所以问题就是对牛和空位进行排列,让对应的牛之间的距离至少有一个为奇数。

至少有一个为奇数这个不好求,容易想到可以用总方案数减去全部为偶数的方案数。

总方案数显然是隔板法,l个空位中选2n个放牛,然后从左到右依次分配给Alice和Bob,或者反过来先Bob后Alice,所以要乘以2。

距离全部为偶数的解法,先把问题抽象成x个球和y个盒子。一个显然的思路是用二进制分解,由于每个数的二进制分解是完全固定且一一对应的,枚举某个二进制位(至少表示2),那么每个盒子要么有这个二进制位要么没有,完全对应。这个方法也可以处理诸如异或和为0(每一个二进制位是互相独立的所以只需要每次都选偶数个1,并且每个盒子至多拥有1个1即可),剩下枚举到表示1的二进制位(第0位)的时候,不能放在盒子里,只能放在盒子之间和最两端的总共y+1个空位上,由于空位可以重复放球所以这时候要用隔板法。但可惜过不了这一道题,这道题l是1e6,如果是2e5的话应该是可以通过的。那有没有办法直接保障所有盒子的球都是偶数呢?其实就是把2个球打包成一组,然后用隔板法把他们放在不同的盒子里,记得把没用完的继续放在盒子外面。

标签:盒子,必胜,Farm,题解,距离,偶数,先手,Game,必败
From: https://www.cnblogs.com/purinliang/p/18108135

相关文章

  • django安装xadmin及问题解决
    django安装xadmin及问题解决环境:Windows10专业版pycharmpro2020.3django3.2.1xadmin选django2的版本一,安装这里我选择从GitHub安装:pipinstallgit+https://github.com/sshwsfc/xadmin.git结果如下:Successfullyinstalleddefusedxml-0.7.1diff-match-patch......
  • 洛谷 P8405 [COCI2021-2022#6] Naboj 题解
    题意简述给定一张无向图,每条边有个哨兵,初始在边的中间。你可以把某个结点旁边的哨兵全部吸引或远离这个结点。给出最后每个哨兵在边的哪一端,请构造出一种可能的操作方案或报告无解。多种情况输出任意解,你不需要最小化操作步数。题目分析发现一个哨兵和且仅和最后一次关联这条边......
  • [ABC347] AtCoder Beginner Contest 347 题解
    [ABC347]AtCoderBeginnerContest347题解A模拟。BSA模板,把所有子串丢进哈希表里即可。C逆天题,这个分讨并不显然。考虑计算所有天数到今天的偏移量,然后如果最远的和最近的天数的距离\(\leA\)肯定可以,否则可以把所有天向右平移一段距离,然后使得最远的天到达第二周的......
  • CF1942E Farm Game 题解
    我们先默认第一头牛是John的,另一种情况本质相同,最后答案乘上\(2\)就可以了。先说结论:我们将相邻两头牛配对,那么最终答案即满足至少一对牛间隔了奇数个空位的方案数。证明很简单,分\(3\)种情况讨论:每对牛间都间隔了奇数个空位。那么John开始时让所有牛往右行动,在Nhoj行......
  • [题解]P2516 [HAOI2010] 最长公共子序列——求LCS个数
    P2516[HAOI2010]最长公共子序列总的来说,这道题确实很精妙,难度也不小,耗费了不少时间去调。本来想过用容斥的思想,却因为当时理解不深没有继续思考就放弃了。学会了思路后对\(LCS\)有了更深层次的理解。题意简述给定\(A,B\)两个字符串(以.结尾),求它们的最长公共子序列的长度和个数......
  • 0324-0331题解反思
    最近我突然发现,写题解是常常会遗忘的,然而题目中的一些技巧才是永恒的,那么接下来的题解,我应该对以前的题目含有的这些技巧进行一些深刻的复盘。知识点模块1.当我们要实现一个图形的字符串的倒置,比如把福倒过来,我们可以进行以下的操作:先进行行的交换,在进行列的倒置,我们需要用到s......
  • 【C++实验1】学生成绩信息管理系统题解
    【问题描述】编写一个基于结构体得学生成绩信息管理系统。主要功能如下:1.用结构体存放所有数据。2.每个功能都用函数实现。3.输入10个学生的学号和三门课程的成绩。4.计算每个学生的总分。5.按总分从高到低排序。6.加上名次一列。7.输出最后的二维表格样式的成......
  • 题解 P9981 [USACO23DEC] Minimum Longest Trip G
    【洛谷专栏】题意\(N\)个点\(M\)条边的有向无环图,对于每一个点\(i\)你需要求出一条从\(i\)出发的最长路径且路径上边权组成的序列字典序最小。求每一条路径的长度和边权和。分析最长的路径很好求,在DAG上拓扑排序后动态规划即可。(具体的实现可以参考OI-Wiki)现在的......
  • Minlexes题解
    \(\texttt{ProblemLink}\)简要题意在一个字符串\(s\)中,对于每个后缀,任意删掉一些相邻的相同的字符,使得字符串字典序最小。注意:删掉之后拼起来再出现的相邻相同字符不能够删除。思路倍增好题。发现存在局部最优解(最优子结构),并且可以转移到其它结点,可以考虑使用dp。那就......
  • Tomcat启动失败,窗口一闪而过问题解决
    在启动Tomcat时窗口一闪而过,解决方法:在Tomcat安装目录\bin下启动cmd,或在C盘启动后跳转到Tomcat安装目录\bin,输入startup.bat(一定要先做这步,确保具体问题,再根据具体问题百度,不然又是配置JRE,又是配置Tomcat环境变量,最后做了无用功),如果显示如下:先确保java环境变量没问题,我的java......