首页 > 其他 > 详细

CF1530 E. Minimax(模拟)

时间:2021-08-15 11:51:46      阅读:21      评论:0      收藏:0      [点我收藏+]

目录

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(模拟)

原文:https://www.cnblogs.com/Segment-Tree/p/15142683.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!