题解 AT2153 【[ARC064B] An Ordinary Game】
【前言】
这么水的题都没人说明一下的吗。。。我看题解里全是打表诶。。。DPair不才,不得不挺身而出了
【说明】
其实看其他题解也能知道要从字符串长度以及首尾是否相同去考虑,我详细说明一下:
首先我们发现一个及其显然的结论:删除到无法删除时,字符串情况只可能是这样的:
即字符串中出现且只出现两种不同的字符,并交替出现(或只剩两个,但也可以看作这种情况)。
证一下:
首先,不可能只有一种字符,因为相邻字符保证不同,而且由于首尾不能被删除,因此最后至少剩下两个字符,即不可能出现只有一个字符的情况。
排除这种可能性后,只出现两种不同字符的原因在于,由于相邻字符保证不同,且我要保证我现在的状态是一个死局,那么字符串
然后我们发现,若字符串长度为奇数,则首尾下标都为奇数,故要使该状态成为死局必须保证首尾相同,反之,即首尾不同,则绝对安全,不可能死局,也就是必胜,那么对手也就必败。所以当字符串长度为偶数且首尾不同时,我的下一步操作一定会使对手进入必胜态,那么我就必败(因为本游戏没有平局)。
首尾相同的情况也类似,只不过此时字符串长度为偶数时是安全的必胜态,奇数才为必败态。
因此当首尾相同且长度偶数或首尾不同且长度奇数时,先手必胜,反之后手必胜。
代码就不放了,其他题解提供了同一份代码的各种各样的写法,而且也很短很浅显,主要是理解上述推导过程。