题解 AT2153 【[ARC064B] An Ordinary Game】

· · 题解

【前言】

这么水的题都没人说明一下的吗。。。我看题解里全是打表诶。。。DPair不才,不得不挺身而出了

【说明】

其实看其他题解也能知道要从字符串长度以及首尾是否相同去考虑,我详细说明一下:

首先我们发现一个及其显然的结论:删除到无法删除时,字符串情况只可能是这样的:

abababab...abab

即字符串中出现且只出现两种不同的字符,并交替出现(或只剩两个,但也可以看作这种情况)。

证一下:

首先,不可能只有一种字符,因为相邻字符保证不同,而且由于首尾不能被删除,因此最后至少剩下两个字符,即不可能出现只有一个字符的情况。

排除这种可能性后,只出现两种不同字符的原因在于,由于相邻字符保证不同,且我要保证我现在的状态是一个死局,那么字符串ss_{i-1}=s_{i+1},即所有奇数下标位置的字符相同,所有偶数下标位置的字符相同,且这两种字符不同。故只有两种字符,且奇偶交替出现

然后我们发现,若字符串长度为奇数,则首尾下标都为奇数,故要使该状态成为死局必须保证首尾相同,反之,即首尾不同,则绝对安全,不可能死局,也就是必胜,那么对手也就必败。所以当字符串长度为偶数且首尾不同时,我的下一步操作一定会使对手进入必胜态,那么我就必败(因为本游戏没有平局)。

首尾相同的情况也类似,只不过此时字符串长度为偶数时是安全的必胜态,奇数才为必败态。

因此当首尾相同且长度偶数首尾不同且长度奇数时,先手必胜,反之后手必胜。

代码就不放了,其他题解提供了同一份代码的各种各样的写法,而且也很短很浅显,主要是理解上述推导过程。