TheNumberGame
作者:欧阳思琦
关键词:子串 字符串匹配
题目简述
Manao 有一个整数,他的朋友有一个整数(都是进制数)。他们发明了一个游戏,两个人轮流操作,每个人每轮可以将他的数翻转或者除以向下取整。如果不超过次操作(Manao的次+朋友的次)后两个数相等了,那么Manao赢,否则Manao输。
给你,假设两个玩家都是采取最佳策略进行游戏,问Manao最后会赢还是会输。
算法
先给出结论:只要或者的翻转(记为)是的一个子串,那么Manao赢,否则Manao输。
证明的话也很简单,因为通过这两个操作(相当与只能在两边删除字符),能构成的只有的子串或者子串的翻转。具体操作方法就是根据当前的状态翻转删除,保持是的子串即可(可以将看成任意字符串的子串),因为字符串的长度只有,如果不变短就必定会有一个时刻,在步以内总是能够决出胜负的。
因为字符串长度很短,暴力或者KMP都是可以的。