这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
|
2020-2021:teams:farmer_john:2020hdu暑期多校第一场 [2020/07/24 16:34] jjleo [题解] |
2020-2021:teams:farmer_john:2020hdu暑期多校第一场 [2020/10/07 21:23] (当前版本) jjleo |
||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | ======2020hdu暑期多校第一场====== | + | ======2020HDU暑期多校第一场====== |
| [[https://codeforces.com/contestInvitation/377448d2c4fe386ab80df2e4d6f6ea0ef6fcb105|比赛链接]] | [[https://codeforces.com/contestInvitation/377448d2c4fe386ab80df2e4d6f6ea0ef6fcb105|比赛链接]] | ||
| =====A.===== | =====A.===== | ||
| 行 51: | 行 51: | ||
| =====I.===== | =====I.===== | ||
| - | **solved by ** | + | **upsolved by ** |
| ====题意==== | ====题意==== | ||
| 行 66: | 行 66: | ||
| 求字符串每个前缀的最小后缀,多组数据。$\sum|s| \le 2 \times 10^7$ | 求字符串每个前缀的最小后缀,多组数据。$\sum|s| \le 2 \times 10^7$ | ||
| ====题解==== | ====题解==== | ||
| - | 对字符串进行Lyndon分解,考虑在Duval算法中三个下标的含义:$i$为$s_2$开头,$j$为$s_3$开头,$k$为当前考虑和$j$匹配的位置。 | + | 对字符串进行Lyndon分解,考虑在Duval算法中三个下标的含义:$i$为$s_2$开头,$j$为$s_3$开头,$k$为当前考虑和$j$匹配的位置。如果$s[k]=s[j]$,说明$s[k \cdots j]$作为Lyndon串的一个循环同构,最小后缀不会出现在其中,只需将$k$对应的最下后缀下标进行位移即可,即此时最小后缀的下标$pos[j]=pos[k]+j-k$;如果$s[k]<s[j]$,此时$s[i \cdots j]$构成一个Lyndon串,因此$pos[j]=i$。另外,每次$i$变化后,可以得到$pos[i]=i$。进行上述三种维护即可。 |
| =====L.===== | =====L.===== | ||
| **solved by Bazoka13** | **solved by Bazoka13** | ||