8
change 0 ab 0 ae
change 0 ac 0 af
change 0 b 0 ab
change 0 c 0 ac
#
change 0 e 0 b
change 0 f 0 c
#
5
难度:中等。
```plain
44
change 0 a 1 x
change 0 b 1 y
change 0 c 1 z
change 1 xx 6 de
change 1 xy 6 dj
change 1 xz 6 dp
change 1 yy 6 ij
change 1 yz 6 ip
change 1 zz 6 op
change 2 xx 6 ef
change 2 xy 6 ek
change 2 xz 6 eq
change 2 yy 6 jk
change 2 yz 6 jq
change 2 zz 6 pq
change 3 xx 6 fg
change 3 xy 6 fl
change 3 xz 6 fr
change 3 yy 6 kl
change 3 yz 6 kr
change 3 zz 6 qr
change 4 xx 5 gx
change 4 xy 5 gy
change 4 xz 5 gz
change 4 yy 5 ly
change 4 yz 5 lz
change 4 zz 5 rz
change 0 d 1 x
change 0 e 2 x
change 0 f 3 x
change 0 g 4 x
change 0 i 1 y
change 0 j 2 y
change 0 k 3 y
change 0 l 4 y
change 0 o 1 z
change 0 p 2 z
change 0 q 3 z
change 0 r 4 z
#
change 0 x 0 a
change 0 y 0 b
change 0 z 0 c
#
```
$6$ 分做法:前面的做法过于繁琐。考虑用一个 $\texttt{m}$ 字符,称作【后移标记】,表示向后移动当前最大的一个字符,那么当找到两个字符的时候加入一个后移标记就可以了。
```plain
26
change 0 a 1 x
change 0 b 1 y
change 0 c 1 z
change 4 mz 5 z
change 3 mz 4 z
change 2 mz 3 z
change 1 mz 2 z
change 4 my 5 y
change 3 my 4 y
change 2 my 3 y
change 1 my 2 y
change 4 mx 5 x
change 3 mx 4 x
change 2 mx 3 x
change 1 mx 2 x
change 0 zz 0 zzm
change 0 yz 0 yzm
change 0 xz 0 xzm
change 0 yy 0 yym
change 0 xy 0 xym
change 0 xx 0 xxm
#
change 0 x 0 a
change 0 y 0 b
change 0 z 0 c
#
```
满分做法:容易发现,一堆不同字符是主要开销。所以考虑把 $\texttt{abc}$ 压成 $36,6,1$ 个同一字符。找到 $\texttt{a}$ 的时候加 $36 \times 4 = 144$ 个【后移标记】,找到 $\texttt{b}$ 的时候加 $24$ 个,找到 $\texttt{c}$ 的时候加 $4$ 个,用【后移标记】暴力后移压成的字符就可以了。最后要把标记清掉。
```plain
13
change 0 a 1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
change 0 b 1 xxxxxx
change 0 c 1 x
#
change 4 mx 5 x
change 3 mx 4 x
change 2 mx 3 x
change 1 mx 2 x
change 0 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0 ammmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
change 0 xxxxxx 0 bmmmmmmmmmmmmmmmmmmmmmmmm
change 0 x 0 cmmmm
change 0 m 0 @
#
```
### 6
难度:简单。
直接用类似摩尔投票的方法做。先消 $\texttt{abc}$ 让每个盒子里只剩两种球,然后消 $\texttt{ab}$、$\texttt{ac}$、$\texttt{bc}$、$\texttt{aa}$、$\texttt{bb}$、$\texttt{cc}$。
```plain
8
change 0 abc 0 @
change 0 ab 0 @
change 0 ac 0 @
change 0 bc 0 @
change 0 aa 0 a
change 0 bb 0 b
change 0 cc 0 c
#
```
### 7
难度:困难。
不太能沿用 $6$ 的做法。继续考虑用字符过渡。不妨把 $\texttt{ab}$、$\texttt{ac}$、$\texttt{bc}$ 分别压成 $\texttt{def}$,然后如果存在 $\texttt{bd}$、$\texttt{ce}$、$\texttt{cf}$ 说明两个字符中大的字符较多,把 $\texttt{def}$ 替换成大的字符。否则就是小的多,替换成小的字符。
```plain
10
change 0 ab 0 d
change 0 bd 0 bb
change 0 d 0 a
change 0 ac 0 e
change 0 ce 0 cc
change 0 e 0 a
change 0 bc 0 f
change 0 cf 0 cc
change 0 f 0 b
#
```
### 8
难度:中等。
$9$ 分做法:手算出每个字符对每一位的贡献,用五个字符分别表示对五位的贡献,直接移动即可。
```plain
10
change 0 a 6 defgh
change 0 b 6 deefffgggghhhhh
change 0 c 6 deeeefffffffffgggggggggggggggghhhhhhhhhhhhhhhhhhhhhhhhh
#
change 0 d 1 a
change 0 e 2 a
change 0 f 3 a
change 0 g 4 a
change 0 h 5 a
#
```
满分做法:发现 $n=1$,所以可以选一个盒子不打标记,直接把 $\texttt{a}$ 加进去。
```plain
9
change 1 a 2 dafgh
change 1 b 2 daafffgggghhhhh
change 1 c 2 daaaafffffffffgggggggggggggggghhhhhhhhhhhhhhhhhhhhhhhhh
#
change 0 d 1 a
change 0 f 3 a
change 0 g 4 a
change 0 h 5 a
#
```
### 9
难度:极度困难。
其实核心思想很简单,但是要加一车优化导致不可读了(根据剪贴板,出题人似乎都没法详细解释每一个优化),我写一个我的大致理解抛砖引玉吧。
思想源于一个性质:$\texttt{c}$ 无需比较,以 $\texttt{a}$ 的数量为第一关键字,$\texttt{b}$ 的数量为第二关键字进行排序就可以得到字符串的顺序。
于是可以把 $\texttt{a}$ 压成 $max+1$ 个字符 $\texttt{o}$,$\texttt{b}$ 压成 $1$ 个字符 $\texttt{o}$,比较 $\texttt{o}$ 的个数。
[std](https://www.luogu.me/paste/57zgqvpt) 的实现大概是,首先,用 $\texttt{r}$ 来使每个盒子都被处理到,不妨称为【苏醒标记】。因为最多只会有 $4$ 个盒子没有 $\texttt{aa}$ 或 $\texttt{bc}$,所以给有这两个字符串的盒子加上【苏醒标记】,然后传给其他盒子,使得每一个盒子的字符都被转化成 $\texttt{o}$。
接下来,把 $\texttt{r}$ 回收利用处理排名。研究了一下,大致逻辑是用 $\texttt{s}$ 维护排名,根据 $\texttt{o}$ 保留 $\texttt{r}$,用 $\texttt{v}$ 过渡,$\texttt{o}$ 越多,保留的 $\texttt{r}$ 越多,消掉的 $\texttt{s}$ 就越多,消掉的 $\texttt{s}$ 越多排名就越靠前。
对于一份加了大量抽象优化的代码进行详细分析还是困难的,大概也就只能分析到这里了,如果有我理解错的欢迎指出。
### 10
难度:困难。
要用到不少技巧。
首先,字符串长度有限制,沿用 $5$ 的进制压位不太能做,看起来要适当利用断点。
然后就是非常神仙的思路:把 $\texttt{b}$ 和 $\texttt{c}$ 分别压成 $n \cdot max+1$ 和 $n \cdot max+2$ 个 $\texttt{a}$,再用一个 $\texttt{t}$ 标记表示往后一位传 $a$,根据开头的断点适当调整顺序就可以通过了。
```plain
15
change 5 t 5 @
change 4 t 5 a
change 3 t 4 a
change 2 t 3 a
change 1 t 2 a
change 0 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0 c
change 0 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0 b
change 0 a 0 tx
change 0 b 0 ttttttttttttttttttttttttttttttttttttttttttttttttttty
change 0 c 0 ttttttttttttttttttttttttttttttttttttttttttttttttttttz
#
change 0 x 0 a
change 0 y 0 b
change 0 z 0 c
#
```