首先考虑原题咋做。考虑判断答案。
- 当且仅当 序列全为 时答案为 ;
- 序列 没有 时答案为 的个数对 取模的余数 ;
- 否则,当且仅当在序列 为“一段 ,,一段 ”(左右两边的一段 都可以为空)的形式时,答案为 ,其余情况为 。
证明
前两个情况是显然的。先证明第三种情况的对应形式无法合成 ,可以发现如果 不参与操作只是相当于减少了一个 ,还是该形式;而 若参与操作,序列 就会变为第二种情况,并且只有奇数个 ,显然答案为 。所以该情况一定只能合成 。
再证明非对应形式一定可以合成。考虑归纳,如果我们能找到一个 ,然后将其左右两边合成,只要左右两边不都是 ,最终就可以合出 。
假设 的个数大于两个,那么选择最左边的 即可,右边至少有两个 ,一定可以得到 ;
假设 的个数恰好有两个,那么序列 一定是 的形式,其中 都是不存在 的序列。如果 为 ,那么先将 和旁边一个 合成即可得到 的形式,该形式答案一定为 ;否则左右两个 肯定有一个合法。
假设 的个数只有一个。如果 两边至少有一个不是 ,那么我们就有操作空间了:当 有奇数个时,我们让最靠近 的 把经过的 都干掉,与 合并。否则我们直接让 与它旁边的那个 合并。假设这个 的左右两边都不合法,那么一定有一边至少有三个 ,我们把最靠近 的两个 合并, 两边就至少有一个 ;否则可以直接合出 。
这样所有情况都被考虑到了,证毕。
那么对于最小字典序,我们贪心从前往后枚举合并位置即可,如果一个位置合并时不影响答案就合并。
显然答案为 或 时合并序列均为全 ,那么我们只需要考虑答案为 的情况。
那么我们肯定是一直合并第一个位置,直到某个临界位置时再合并第一个位置会导致答案变大。考虑这种临界情况会有若干种(其中第一个位置可能是一个前缀一直合并第一个位置得出的):
- ;
- ;
- ;
- ;
- ;
- ;
- ,其中 里只包含 ,且 的个数为奇数。
- ,其中 里只包含 ,且 的个数为奇数。
- ,其中 里只包含 ,且 的个数为奇数,且 。
- ,其中 里只包含 ,且 的个数为奇数。
对于每一种分类讨论出它对应的序列并统计即可。计数是简单的,你可能需要预处理出 表示长度为 ,一直合并首位得到 的序列数,可能还需要处理 的幂次。时间复杂度为 。