一道好题

背景:大爷给机房小伙伴们口述了一道题,可是yy了半天QAQ

题意:给一个字符串(10^5),无限重复,多次(10^5)询问,求第x(10^9)位之前本质不同的子串个数

   考虑每次往后添加一个串,求新增的本质不同的子串个数

   

   首先,形成的本质不同的子串一定是从最前面的串到最后面的串的(蓝线)

   考虑该情况下相同的子串:终点在同一个串内(绿线),终点在前一个串内(黄线)

   那么要想在该情况下相同,需要满足的性质如下:

   

   我们发现,蓝色实心区域应和黄色实心区域相同,那么原字符串纯循环........

   所以我们将原字符串拆完后,单独处理第一次拼接,之后每次加上len^2即可.......

   代码懒得写了,用后缀数组瞎搞就行了

posted @ 2017-03-14 22:06  Czarina  阅读(199)  评论(0编辑  收藏  举报