Problem B. Vera and Banquet

后缀数据结构 GYM

题目链接

题目大意

给出长度为N的字符串,围成一个圈。可以顺时针或逆时针取出子串。问,有多少种不同的子串?

数据范围:2≤N≤500002 \le N \le 50000 字符只包含小写字母

解答

求一个字符串的子串种类,是经典问题了,后缀数组和后缀自动机均可做。

加上圈的条件,如果只是顺时针,可以copy一遍,统计长度≤N\le N 的种类。

对于逆时针,在copy一遍的基础上,对称过去,中间加一个特殊字符。

所以,最后就是对一个长度为4∗N+14*N+1的字符串做后缀数组或后缀自动机,计算长度≤N\le N 的种类并减去包含中间特殊字符的字符串种类(这个比较好算,包含特殊字符的子串都没有重复,可以直接算)。

如果包含特殊字符的长度是len,那么该长度就有len种子串(特殊字符分别放在位置1..len处)

所以包含特殊字符的子串是1+2+...+N=N∗(N+1)21+2+...+N=\frac{N*(N+1)}{2}种

我的做法是用后缀自动机,建完自动机后,结点有cnt个,start结点的编号是1。

最终公式如下:

Ans=∑i=start+1cnt(min(val[i],n)−min(val[par[i]],n))−N∗(N+1)2

Ans=\sum_{i=start+1}^{cnt}(min(val[i],n)-min(val[par[i]],n)) - \frac{N*(N+1)}{2}
AC代码 (后缀自动机)

如果用后缀数组的话,公式也是类似的,改一下就可以了。

Ans=∑i=14∗N+1(min(4∗N+1−sa[i]+1,n)−min(hei[i],N))−N∗(N+1)2

Ans=\sum_{i=1}^{4*N+1}(min(4*N+1-sa[i]+1,n)-min(hei[i],N)) - \frac{N*(N+1)}{2}
AC代码 (后缀数组)

codeforces GYM 101431B (后缀数据结构)相关推荐

  1. Codeforces Gym 101173 CERC 16 D BZOJ 4790 Dancing Disks

    Codeforces Gym 101173 CERC 16 D & BZOJ 4790 Dancing Disks 强烈安利这道构造题目,非常有意思. 这里用到的思想是归并排序! 多路归并排序 ...

  2. Codeforces Gym 101086 M ACPC Headquarters : AASTMT (Stairway to Heaven)

    Codeforces Gym 101086 M ACPC Headquarters : AASTMT (Stairway to Heaven) 题目来源: Codeforces 题意: 给出一些比赛, ...

  3. [Codeforces Gym 101651/100725B] Banal Tickets

    Codeforces Gym 100725 题解: 先分两种情况, 积为000与积非0" role="presentation" style="position ...

  4. Vasya and Good Sequences (Codeforces Round #512) 后缀和

    Vasya and Good Sequences (Codeforces Round #512) 后缀和 嘛,蒟蒻第一次写blog,也是第一次用c++好好写程序,多多关照吧 原题: Vasya可以将一 ...

  5. Gym 101431B Vera and Banquet (后缀数组)

    题目链接 一个环形的字符串,求本质不同子串数目,顺逆时针皆可. 顺时针直接复制一遍,统计长度不超过n的种类:逆时针就翻转过来再复制一遍,统计长度不超过n的种类.因此搞到一起就是把串复制一遍再对称过去, ...

  6. Codeforces gym 2013-2014 Samara SAU ACM ICPC Quarterfinal Qualification Contest

    题目地址:http://codeforces.com/gym/100247 2014.10.27版 26号训练的题,今天发现A题有更高效的解法,用到了前缀最大值和后缀最大值 A. The Power ...

  7. Codeforces Gym 100513G G. FacePalm Accounting 暴力

    G. FacePalm Accounting Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513 ...

  8. Codeforces Gym 100269 Dwarf Tower (最短路)

    题目连接: http://codeforces.com/gym/100269/attachments Description Little Vasya is playing a new game na ...

  9. Codeforces Gym 100676G Training Camp 状压dp

    http://codeforces.com/gym/100676 题目大意是告诉你要修n门课,每门课有一个权值w[i], 在第k天修该课程讲获得k*w[i]的学习点数,给出了课程与先修课程的关系,要修 ...

  10. codeforces Gym 100338E Numbers (贪心,实现)

    题目:http://codeforces.com/gym/100338/attachments 贪心,每次枚举10的i次幂,除k后取余数r在用k-r补在10的幂上作为候选答案. #include< ...

最新文章

  1. 从根本上了解异步编程体系
  2. 配置redis三主三从
  3. 码农不重视文档:开源项目深受其苦
  4. yii2增删改查及AR的理解
  5. XADD和NEG命令
  6. springMVC从上传的Excel文件中读取数据
  7. linux发行版衍生关系,linux发行版-Ubuntu的衍生版本UbuntuKylin初体验(伪)
  8. idea拦截了html中的静态资源,IDEA配置静态资源热加载操作(Springboot修改静态资源不重启)...
  9. 如何减少mysql的连接时间_mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案...
  10. 2014年5月欧洲地区SAT写作真题及解题技巧
  11. Win10 修复引导
  12. Tita绩效宝:在360度评估中要问的10个最佳问题
  13. 最新CentOS7.5部署L版ceph 20190610及额外手册告警升级多活等
  14. php7.4配置文件,Centos8中php7.4安装,附配置文件及常用命令
  15. 到底什么是“被动收入”?
  16. 7-10 公路村村通 (30 分)
  17. 偶然当程序员却拿下图灵奖,超算榜单之父讲述人生开挂经历
  18. CloudXNS探索之旅
  19. C++实现电子宠物系统
  20. Windows 如何关闭快捷键ctrl+alt+方向键旋转屏幕

热门文章

  1. intel服务器芯片组历史,Intel主板芯片组发展史.doc
  2. ubuntu中修改只读文件
  3. ”周期天王”20大预言,针针见血,看完整个人通透多了
  4. PHP 加密解密函数
  5. 阿里高校实践计划 class6 搭建nas个人网盘
  6. jQuery学习笔记之closest()
  7. IE浏览器发送两次相同请求第二次读取第一次缓存问题
  8. envi栅格图像镶嵌_影像镶嵌(基于像素的图像镶嵌)
  9. 数字逻辑电路(1)--逻辑代数基础
  10. matlab画增益频率,HFSS中如何查看增益随频率的变化曲线?