用户工具

站点工具


2020-2021:teams:farmer_john:2020hdu暑期多校第一场

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
2020-2021:teams:farmer_john:2020hdu暑期多校第一场 [2020/07/24 16:31]
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$匹配的位置。如果$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**
2020-2021/teams/farmer_john/2020hdu暑期多校第一场.1595579511.txt.gz · 最后更改: 2020/07/24 16:31 由 jjleo