[spojSUBST1]New Distinct Substrings
求出后缀数组和height数组,然后因为子串即后缀的前缀,考虑不断新增后缀然后计算贡献,如果以sa的顺序新增那么第i个就会产生n-sa[k]+1-h[k](n-sa[k]+1为总方案,h为不合法的方案),累计即可。

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 50005
4 int n,m,ans,a[N],b[N],h[N],sum[N],ra[N<<1],sa[N];
5 char s[N],s1[N];
6 void change(){
7 for(int i=0;i<n;i++)a[i]=s[i];
8 memcpy(ra,a,sizeof(a));
9 sort(a,a+n);
10 m=unique(a,a+n)-a;
11 for(int i=0;i<n;i++)ra[i]=lower_bound(a,a+m,ra[i])-a+1;
12 }
13 void sort(int k){
14 memset(sum,0,sizeof(sum));
15 for(int i=0;i<n;i++)sum[ra[i+k]+1]++;
16 for(int i=1;i<=m;i++)sum[i+1]+=sum[i];
17 for(int i=0;i<n;i++)b[sum[ra[a[i]+k]]++]=a[i];
18 }
19 void build(){
20 for(int i=1;;i<<=1){
21 for(int j=0;j<n;j++)a[j]=j;
22 sort(i);
23 memcpy(a,b,sizeof(a));
24 sort(0);
25 m=a[b[0]]=1;
26 for(int j=1;j<n;a[b[j++]]=m)
27 if ((ra[b[j-1]]!=ra[b[j]])||(ra[b[j-1]+i]!=ra[b[j]+i]))m++;
28 memcpy(ra,a,sizeof(a));
29 if (m==n)break;
30 }
31 for(int i=0;i<n;i++)sa[ra[i]]=i;
32 }
33 void height(){
34 m=0;
35 for(int i=0;i<n;h[ra[i++]]=m,m-=(m>0))
36 for(int j=sa[ra[i]-1];(i!=j)&&(s[i+m]==s[j+m]);m++);
37 h[1]=0;
38 }
39 int lcp(int x,int y){
40 int ans=0x3f3f3f3f;
41 if (ra[x]>ra[y])swap(x,y);
42 for(int i=ra[x]+1;i<=ra[y];i++)ans=min(ans,h[i]);
43 return ans;
44 }
45 void write(int x,int y){
46 for(int i=x;i<=y;i++)printf("%c",s[i]);
47 }
48 int main(){
49 int t;
50 scanf("%d",&t);
51 while (t--){
52 scanf("%s",s);
53 n=strlen(s);
54 change();
55 build();
56 height();
57 ans=0;
58 for(int i=1;i<=n;i++)ans+=n-sa[i]-h[i];
59 printf("%d\n",ans);
60 }
61 }
[spojSUBST1]New Distinct Substrings的更多相关文章
- SPOJ-SUBST1 New Distinct Substrings(后缀数组)
题目大意:判断总共有多少种不同的子串. 题目分析:不同的子串数目为 Σ(后缀SA[i]的长度-height[i]). 代码如下: # include<iostream> # include ...
- SPOJ - SUBST1 New Distinct Substrings —— 后缀数组 单个字符串的子串个数
题目链接:https://vjudge.net/problem/SPOJ-SUBST1 SUBST1 - New Distinct Substrings #suffix-array-8 Given a ...
- 后缀数组---New Distinct Substrings
Description Given a string, we need to find the total number of its distinct substrings. Input T- nu ...
- SPOJ 694. Distinct Substrings (后缀数组不相同的子串的个数)转
694. Distinct Substrings Problem code: DISUBSTR Given a string, we need to find the total number o ...
- 后缀数组:SPOJ SUBST1 - New Distinct Substrings
Given a string, we need to find the total number of its distinct substrings. Input T- number of test ...
- DISUBSTR - Distinct Substrings
DISUBSTR - Distinct Substrings no tags Given a string, we need to find the total number of its dist ...
- 705. New Distinct Substrings spoj(后缀数组求所有不同子串)
705. New Distinct Substrings Problem code: SUBST1 Given a string, we need to find the total number o ...
- 【SPOJ】Distinct Substrings(后缀自动机)
[SPOJ]Distinct Substrings(后缀自动机) 题面 Vjudge 题意:求一个串的不同子串的数量 题解 对于这个串构建后缀自动机之后 我们知道每个串出现的次数就是\(right/e ...
- 【SPOJ】Distinct Substrings/New Distinct Substrings(后缀数组)
[SPOJ]Distinct Substrings/New Distinct Substrings(后缀数组) 题面 Vjudge1 Vjudge2 题解 要求的是串的不同的子串个数 两道一模一样的题 ...
随机推荐
- 从零入门 Serverless | 使用 Spot 低成本运行 Job 任务
作者 | 代志锋(云果) 阿里云技术专家 本文整理自<Serverless 技术公开课>,点击链接即可免费听课:https://developer.aliyun.com/learning ...
- bzoj2242,洛谷2485----SDOI2011计算器(exgcd,qsm,bsgs模板)
就是一道模板题! 这里再强调一下 BSGS 考虑方程\(a^x = b \pmod p\) 已知a,b,p\((2 \le p\le 10^9)\),其中p为质数,求x的最小正整数解 解法: 注意到如 ...
- Eureka使用总结
关于Eureka: 提供基于 REST的服务,在集群中主要用于服务管理.使用该框架,可以将业务组件注册到Eureka容器中,这些组件可进行集群部署,Eureka主要维护这些服务的列表并自动检查他们的状 ...
- FastAPI 学习之路(十八)表单与文件
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- Longhorn 云原生容器分布式存储 - 故障排除指南
内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生容器分布式存储 - 设计架构和概念 Longhorn 云原生容器分布式存储 - ...
- Python读取Excel表格
前言:需要进行自动化办公或者自动化测试的朋友,可以了解下此文,掌握Python读取Excel表格的方法. 一.准备工作: 1.安装Python3.7.0(官网下载安装包) 2.安装Pycharm(官网 ...
- JavaScript03
类型转换和运算符 typeof函数 检测数据类型,可以使用以下两种调用的方式: typeof 变量或表达式 typeof(变量或表达式) var n="asda"; console ...
- Sequence Model-week2编程题1-词向量的操作【余弦相似度 词类比 除偏词向量】
1. 词向量上的操作(Operations on word vectors) 因为词嵌入的训练是非常耗资源的,所以ML从业者通常 都是 选择加载训练好 的 词嵌入(Embedding)数据集.(不用自 ...
- aritest发送测试报告到邮件
#!/usr/bin/env python # -*- coding=utf-8 -*- __CreateAt__ = '2020/4/19-17:34' import shutil from air ...
- BUAA2020软工作业(二)——对软件工程的初步理解
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业 我在这个课程的目标是 进一步提高自己的编码能力,工程能力 这个作业在哪个具体方面帮助 ...