P3975 [TJOI2015]弦论
传送门
题目描述
为了提高智商,ZJY开始学习弦论。这一天,她在《 String theory》中看到了这样一道问题:对于一个给定的长度为n的字符串,求出它的第k小子串是什么。你能帮帮她吗?
输入输出格式
输入格式:
第一行是一个仅由小写英文字母构成的字符串s
第二行为两个整数t和k,t为0则表示不同位置的相同子串算作一个,t为1则表示不同位置的相同子串算作多个。k的意义见题目描述。
输出格式:
输出数据仅有一行,该行有一个字符串,为第k小的子串。若子串数目不足k个,则输出-1。
输入输出样例
输入样例#1:
aabc
0 3
输出样例#1:
aab
输入样例#2:
aabc
1 3
输出样例#2:
aa
输入样例#3:
aabc
1 11
输出样例#3:
-1
说明
数据范围
对于$10\%$的数据,$n \le 1000$。
对于$50\%$的数据,$t = 0$。
对于$100\%$的数据,$n \le 5 × 10^5, t < 2, k \le 10^9$。
分析
T=0时,设$siz_i=1$,即出现次数设为1。
T=1时,将$siz_i$设为$Endpos$的大小,即出现次数。
之前在想如果复制的点不设置$siz_i$,最终统计时是否会出现$siz_i=0$的情况。
网上说不会。
那就自己yy一下。
因为复制的点一定有子树,而$siz_i$是子树中终止节点的个数。
那么我们就需要就证明子树中一定有至少一个终止节点。
因为它有子树,说明有终止节点(感觉像没证一样,但换个角度想想,我们又不傻,如果它的子树内没有终止节点,那么我们还建子树干嘛,只会平白浪费时间和空间)。
所以得证。
正确性不保证,自己什么都不懂,没有理论支持,自己yy自然没法保证正确性…
如果有人发现这个假了,或者有正确性保证的证明,请评论告诉我,谢谢。
代码
1 |
|