2020-2021:teams:farmer_john:jjleo:codeforces_round_612_div._2_virtual_participation
rank:1125
A
B
C
D
E
题解:考虑第一问,我们先访问$s[2..n]$,将所有子串各自排序后塞进multiset,再询问$s[1..n]$,可以看出多了$n$个前缀,而且长度严格单增,我们依靠multiset求出这多出的$n$个前缀即可还原原字符串。第二问这个方法返回的子串数量过多,我们可以用同样的方法先得到$s[1..\lceil\frac{n}{2}\rceil]$,然后再询问一次$s[1..n]$,设$f_{i,j}$为长度为$i$的子串中字符$j$出现的次数,那么$f_{i,j}-f_{i-1,j}$就是字符$j$在$s[i..n+1-i]$中出现的次数(证明大致就是长度为$i$的子串每次都比长度为$i-1$的子串多一个字符,但是最后长度为$i-1$的子串的数量比长度为$i$的子串多一个,两者之差就是字符$j$在$s[i..n+1-i]$中出现的次数),因此我们倒序枚举$i$即可还原出原字符串中的后一半。
F
2020-2021/teams/farmer_john/jjleo/codeforces_round_612_div._2_virtual_participation.txt · 最后更改: 2020/06/13 12:06 由 jjleo