原意是把sam那一堆做完……

这题还是很sb的,$\sum{maxlen(s)-minlen(s)+1}$就是本质不同的子串数量

然后因为suffix link的性质,maxlen[fa[s]]=minlen[s]-1

所以等价于求$\sum{maxlen(s)-maxlen(fa[s])}$

这个插入的时候随手做就行了。

类似的sb题还有SDOI2016的生成魔咒

(真是不知道省选考这种题意义何在)

#include<bits/stdc++.h>
#define N 1000010
using namespace std;
typedef long long ll;
int a[N],n;ll ans=;
struct Suffix_Automaton{
int cnt,last,ch[N<<][],l[N<<],fa[N<<];
Suffix_Automaton(){cnt=last=;}
void ins(int c){
int p=last,np=++cnt;last=np;l[np]=l[p]+;
for(;p&&!ch[p][c];p=fa[p])ch[p][c]=np;
if(!p)fa[np]=;
else{
int q=ch[p][c];
if(l[p]+==l[q])fa[np]=q;
else{
int nq=++cnt;l[nq]=l[p]+;
memcpy(ch[nq],ch[q],sizeof(ch[q]));
fa[nq]=fa[q];fa[np]=fa[q]=nq;
for(;p&&ch[p][c]==q;p=fa[p])ch[p][c]=nq;
}
}
ans+=l[np]-l[fa[np]];
}
}sam;
inline char read(){
char ch;
do{ch=getchar();}while(ch<'a'||ch>'z');
return ch;
}
int main(){
char c=read();
while(c>='a'&&c<='z')a[++n]=c-'a',c=getchar();
for(int i=;i<=n;i++)sam.ins(a[i]);
printf("%lld\n",ans);
return ;
}

最新文章

  1. 2014嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛
  2. Javascript之旅——第二站:对象和数组
  3. 11.1---有序数组合并(CC150)
  4. 随机获取Mysql数据表的一条或多条记录
  5. Codeforces Gym 100431G Persistent Queue 可持久化队列
  6. 转:2014年最酷的30个JavaScript库
  7. perl 爬取数据&lt;1&gt;
  8. C#单元测试工具包:MvcContrib
  9. vim编辑器设置文件的fileformat
  10. 12C dbca silent
  11. 在linux环境下tomcat 指定 jdk或jre版本
  12. Hessian源码分析--HessianSkeleton
  13. Web API之service worker
  14. CSS背景与边框属性-----box-shadow
  15. 补全爬取的url
  16. 编写陈旭,实现通过字符型变量创建boolean值,再将其转换为字符串输出,观察输出后的字符串与创建Boolean对象时给定的参数是否相等.
  17. Android组件化之终极方案
  18. iOS : 判断运行设备类型是否是iPad
  19. 关于jq ajax封装以及ajax上传Webapi
  20. Python安装模块出错(No module named setuptools)解决方法

热门文章

  1. openstack之Glance介绍
  2. 生成模型(Generative Model)Vs 判别模型(Discriminative Model)
  3. 3. 无重复字符的最长子串(O(N))
  4. hdu1950 Bridging signals
  5. BZOJ3526 [Poi2014]Card 【线段树】
  6. sass的mixin,extend,placeholder,function
  7. 剑桥offer系列(1~10)
  8. 获取文件名称 basename 用法
  9. JavaScript的性能优化:加载和执行
  10. MySQL查看所有用户及拥有权限