题意:给定\(A,B,C,D\)四个数,要求一个字符串,其中有\(A\)个A
字符,\(B\)个B
字符,并且其中最长的连续相同字符子串的长度最小,其字典序最小。问这个字符串的\(C\)~\(D\)位是什么。
思路:首先我们发现这个字符串肯定能表示成以下形式:
A...AB A...AB ... A...AB...B AB...B AB...B ...
即可以分成三段,第一段全是A...AB
这样的,第二段是A...AB...B
,第三段是AB...B
这样的。其中第二段就是第一、三段剩下的。
这样肯定可以保证答案字典序最小。并且每一个A...AB
和AB...B
的长度不超过最长连续相同字符子串的长。
然后我们可以设第一段的长度为\(x\),第三段的长度为\(y\),那么中间一段有\(A-xL-y\)个A
,\(B-yL-x\)个B
。其中\(L\)代表最长的连续相同字符子串。
那么我们看看\(L\)怎么求,首先我们假设\(A\ge B\)。那么我们假装ABABABA
这样放,但是可能会有的不够放\(B\),那么就需要重复放几个A
再放B
。每个A
的段的数量就是\(L\),即\(\lceil \frac{a}{b+1} \rceil\)。
然后就可以求\(x\)和\(y\)了。根据鸡兔同笼问题,我们先假设全是AB...B
这样的,那么现在用了\(Lb\)个A
。
把一个AB...B
改成A...AB
会增加\(L-1\)个A
。那么\(x\)就等于\(\lfloor \frac{Lb-a}{L-1} \rfloor\)。
同理可以算出\(y\)。
那么把\(c...d\)中每一个数属于哪一个段,是第几个讨论一下就好了。