CF1530 E. Minimax(模拟)

目录

Description

给出一个字符串,定义 \(f(t)=max(next[i]), {\{1<=i<=|t|}\}\), 其中 \(next[]\) 表示 \(kmp\) 算法中的数组;

\(t\) 重新组合之后,得到的字符串 \(s\) ,使得 \(f(s)\) 最小,如果有多组,输出字典序最小的哪一个 \(s\)

State

\(1<=T<=10^5\)

\(1<=|t|<=10^5\)

Input

3
vkcup
abababa
zzzzzz

Output

ckpuv
aababab
zzzzzz

Solution

1.如果只有一种字符构成的字符串,那么答案就是原串

2.首先如果所有字符都只有 一个,那么 \(f(s)=0\) ,只要输出字典序最小的那个就好

3.如果有字符出现了不止 1 次,首先想要保证 \(f(s)\) 最小,如果有字符出现了 1 次,依旧可以保证 \(f(s)=0\)

4.但如果出现的字符都不知出现一次,那么不可避免地 \(f(s)>0\);

4.1:找到字典序最小的字符记为 \(a\),如果可以满足 \(aababacaca\) 的情况最好;但是 \(aababacacaaaaa\) 这样就需要调整了

4.2:如果只有两种字符,那么答案可以写成 \(abbbbbaaaaaa\),这是为了避免出现 \(ab\)

4.3:但是如果字符过多,\(abaaaacbbbbbbccc\) ,这样同样可以避免出现 \(ab\) 的情况,而且字典序还更小

CF1530 E. Minimax(模拟)

上一篇:echarts常用配置项记录


下一篇:简述 transform,transition,animation 的作用?