A5856 | 「JSOI2019」节日庆典
时间限制1s
内存限制1024MB
通过 / 提交0/0
题目描述
#### 题目背景
JYY 和探险队顺利完成了火星上的任务。在离开前,探险队正好赶上了火星人一年一度最盛大的节日「气球节」。然而,火星人遇到了每年一度的麻烦:怎样最美观地摆放气球。JYY 决定请你设计算法帮助火星人解决这个问题。
#### 题目描述
在庆典开始前,火星人会把气球准备好并串在一根绳子上。气球按顺序排列可以看成是一个由小写字母组成的长度为 $n$ 的字符串 $S$。然后,火星人会按照字符串的顺序逐个把气球加入到一个庆典的圆环上,并且表演一个节目庆祝。
下图展示了一串气球

为了让每个节目都更好看,火星人希望在每个节目开始前调整气球在环上的顺序,使得每个节目的气球排布都最美观。对于一组气球(一个字符串),火星人认为最美观的字符串是庆典圆环上按绳子方向读出**字典序最小的字符串**,例如对于
-
-
-
-
-
如果有多个字典序最小的字符串,火星人希望找出**离绳头最近**的那个(即$i$最小的那个)。更严谨地说,对于字符串$T$,定义
$$T_i = T[i\ldots |T|] :: T[1\ldots i-1]\ (1\le i \le |T|)\textrm{,}$$
其中 $::$ 是字符串的拼接操作。定义 $f(T)$ 为最小的 $i$($1\le i \le |T|$)满足 $T_i = \min\{T_1,T_2,\ldots,T_{|T|}\}$。
JYY希望你帮助他设计一个算法,让火星人每个节目的气球排列都最美观,即对于给定字符串 $S$ 的每一个前缀 $S[1\ldots i]$($1\le i \le |S|$),求出$f(S[1\ldots i])$。
JYY 和探险队顺利完成了火星上的任务。在离开前,探险队正好赶上了火星人一年一度最盛大的节日「气球节」。然而,火星人遇到了每年一度的麻烦:怎样最美观地摆放气球。JYY 决定请你设计算法帮助火星人解决这个问题。
#### 题目描述
在庆典开始前,火星人会把气球准备好并串在一根绳子上。气球按顺序排列可以看成是一个由小写字母组成的长度为 $n$ 的字符串 $S$。然后,火星人会按照字符串的顺序逐个把气球加入到一个庆典的圆环上,并且表演一个节目庆祝。
下图展示了一串气球
cbbadbcd 在进行到第 $5$ 个节目时的情形,此时在庆典环上的气球是 cbbad。
为了让每个节目都更好看,火星人希望在每个节目开始前调整气球在环上的顺序,使得每个节目的气球排布都最美观。对于一组气球(一个字符串),火星人认为最美观的字符串是庆典圆环上按绳子方向读出**字典序最小的字符串**,例如对于
cbbad,共有 $5$ 个读出字符串的位置:-
cbbad ($i=1$);-
bbadc ($i=2$);-
badcb ($i=3$);-
adcbb ($i=4$);-
dcbba ($i=5$)。如果有多个字典序最小的字符串,火星人希望找出**离绳头最近**的那个(即$i$最小的那个)。更严谨地说,对于字符串$T$,定义
$$T_i = T[i\ldots |T|] :: T[1\ldots i-1]\ (1\le i \le |T|)\textrm{,}$$
其中 $::$ 是字符串的拼接操作。定义 $f(T)$ 为最小的 $i$($1\le i \le |T|$)满足 $T_i = \min\{T_1,T_2,\ldots,T_{|T|}\}$。
JYY希望你帮助他设计一个算法,让火星人每个节目的气球排列都最美观,即对于给定字符串 $S$ 的每一个前缀 $S[1\ldots i]$($1\le i \le |S|$),求出$f(S[1\ldots i])$。
输入格式
输入只有一行,该行包括一个字符串 $S$。
输出格式
在一行中对于每个 $i$($1\le i\le |S|$),输出一个整数 $f(S[1\ldots i])$。输出的数字之间以空格分隔。
输入输出样例
输入 #1
abaacaba
输出 #1
1 1 3 3 3 6 3 8
|测试点|$n$|是否随机生成|生成限制|
|:-:|:-:|:-:|:-:|
|$1$|$\le 20$|否|无|
|$2,3$|$\le 10^3$|是|字符集为 $\{\texttt{a,b,c}\}$|
|$4$|$\le 2\times 10^5$|是|字符集为 $\{\texttt{a,b,c}\}$|
|$5$|$\le 5\times 10^4$|否|每个字符出现次数相等|
|$6,7$|$\le 10^6$|否|无|
|$8,9,10$|$\le 3\times 10^6$|否|无|
|:-:|:-:|:-:|:-:|
|$1$|$\le 20$|否|无|
|$2,3$|$\le 10^3$|是|字符集为 $\{\texttt{a,b,c}\}$|
|$4$|$\le 2\times 10^5$|是|字符集为 $\{\texttt{a,b,c}\}$|
|$5$|$\le 5\times 10^4$|否|每个字符出现次数相等|
|$6,7$|$\le 10^6$|否|无|
|$8,9,10$|$\le 3\times 10^6$|否|无|
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?