LOJ#551 Matrix
本地打表在线AC什么的最喜欢了。
题意
和在玩游戏,他们要给一个的矩阵打标记。初始时没有任何标记,每一轮先手,两个人可以选一个格子打上自己的标记(),但如果选择了已经打过标记的格子就输掉游戏。
如果在某个时刻,存在一个长度为的排列使得对于,有第行第列的标记为成立,那么获胜。
如果在轮后,依然没有获胜,那么获胜。
给定组询问,每次给定一个数,问在之前的游戏规则下:
、双方记得之前的所有操作,是否有必胜策略。
、只记得当前这一轮的操作,记得所有操作,是否有必胜策略。
。
题解
这种题目就应该大力猜结论。
先考虑比较简单的第一问,在比较大的平凡情况下,假设标记了第行的某个格子,那么就可以选择第行的另一个格子(记为第列)。之后,选择第列上的格子一定是不优的,因此对来说,她可以将棋盘重新看作大小的。只要在时有必胜策略,那么时就一定有必胜策略。
那么暴搜最小的有必胜策略的,可以本地发现时有必胜策略,因此第一问的答案就是。
对于第二问,显然必胜策略应该避免选择已经标记过的格子。可以发现唯一的方法就是使棋盘上的格子两两匹配,对于每一个匹配,假如选择了其中一个,那么就立即选择另一个。
首先为奇数的时候显然无解,考虑怎么在为偶数的时候构造一种匹配方案,使得对于每一个匹配无论选择哪一个,总存在一个排列满足对应的位置都标记了。
先本地暴搜小的情况(当然要加一点剪枝),可以发现和都是有解的。
那么对于更大的,只要在对角线上依次放上或的,剩下的位置随便匹配即可。
比如下面就是的构造方法,蓝色部分随意匹配即可。
于是第二问的答案就是。