H. Impartial Strings
H. Impartial Strings
抽象场不传题解😓。
计算理论题,有限自动机,学到想起来见过回来看看。
思路就是求所述要求是否是正则语言,正则语言在直觉上即只需存储有限信息就可以判断是否符合语言定义。
我们设两个字符串分别为S,T,那么我们即需要想办法找个串其需要无限的信息才能判断其是否符合定义。
一个直观的想法是可以考虑SSSSSSSSSS....TTTTTT...,如果S和T是独立的字符(或者说完全无关)那么我们需要存储S的数量才能判断是否数量相等,显然是非正则的。
但对于有关的S和T,即SSSSS...可能产生一些T,如果SSSSS...产生的T和S的差值是无界的那么显然非正则(泵定理咋证不会),否则其有有限的差值。若|S|>=|T|,那么在一个S中产生的T数量<S数量或T>S会产生无界的差值。也即T会产生在循环元的连接处多余S1次。
如果SSSS...不会产生矛盾,那么我们去暴力产生X尝试S+X作为循环节,若其产生了无界差值,那么0,试的话试500次可能就行了。如果所有尝试都不能使得其产生0,那么就认为其是正则的,因为我们加入X的目的是为了切开尽可能多的产生T的段,但我们枚举足够多次后,总可以到达下界,若下界仍不会产生无穷的情况,那么我们认为其是正则的。
但交一次就知道了,似乎我们的讨论仍有问题:T>S时似乎仍是可以接受的。为什么?因为我们假定|S|>=|T|,我们会暴力枚举X,如果SX循环会产生T>S情况,那么说明对于更小的X(字典序,因为我们是按照字典序枚举的X)其一定都满足产生S和T数量一致。那么我们可能产生的问题是可能能产生S最多的情况T也会出现>S,这时无论如何只要产生一次S就会导致S和T不均衡,那么符合定义的唯有1次都不出现S和T,这样的语言也是正则的,所以我们不应该那么“贪心”,我们的策略应当是寻找产生最多S的办法,所以我们仅对S数>T数考虑即可通过。