SPOJ Distinct Substrings SA
2024-09-21 09:07:13
正解:SA
解题报告:
啊先给个翻译趴QwQ大概就是说给个字符串,求互不相等的子串的个数
算是道小水题辣趴,,,并不难想到的呢QAQ只是因为是新知识所以巩固下而已QAQ
然后就显然考虑合法方案就会是所有方案-不合法方案
所有方案显然是n*(n+1)/2,不合法方案就是相等的子串的个数
考虑相等的子串的个数怎么求?不就是,∑height[i]
欧克做完了
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define gc getchar()
#define ri register int
#define rb register bool
#define rc register char
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i) const int N=+;
int x[N],y[N],sa[N],rk[N],t[N],n,as;
char ch[N]; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il bool cmp(ri gd,ri gs,ri k){return y[gd]==y[gs] && y[gd+k]==y[gs+k];}
il void SA()
{
ri m=,h=;
rp(i,,n)++t[x[i]=ch[i]-'A'+];
rp(i,,m)t[i]+=t[i-];
my(i,n,)sa[t[x[i]]--]=i;
for(ri k=;k<=n;k<<=)
{
ri p=;
rp(i,,n)y[i]=;rp(i,,m)t[i]=;
rp(i,n-k+,n)y[++p]=i;rp(i,,n)if(sa[i]>k)y[++p]=sa[i]-k;
rp(i,,n)++t[x[y[i]]];
rp(i,,m)t[i]+=t[i-];
my(i,n,)sa[t[x[y[i]]]--]=y[i];
swap(x,y);
x[sa[]]=p=;
rp(i,,n)x[sa[i]]=cmp(sa[i],sa[i-],k)?p:++p;
if(p>=n)break;m=p;
}
rp(i,,n)rk[sa[i]]=i;
rp(i,,n)
{
if(h)--h;
while(ch[i+h]==ch[sa[rk[i]-]+h])++h;
as-=h;
}
} int main()
{
ri T=read();
while(T--)
{
memset(x,,sizeof(x));memset(y,,sizeof(y));memset(t,,sizeof(t));memset(sa,,sizeof(sa));memset(rk,,sizeof(rk));
scanf("%s",ch+);n=strlen(ch+);as=n*(n+)/;SA();printf("%d\n",as);
}
return ;
}
这儿是代码QwQ
最新文章
- json_decode返回NULL
- Java(二)
- 基于JS功能强大的日期插件Kalendae
- Objective-C声明在头文件和实现文件中的区别
- 快速搭建VPN服务器
- kibana安装与基础用法
- PhoneGap插件开发流程
- Python中变量的作用域(variable scope)
- Matlab与微积分计算
- [原]生产环境下的nginx.conf配置文件(多虚拟主机)
- ACM-ICPC北京赛区(2017)网络赛_Minimum
- LeetCode120-Triangle-数组,动态规划
- CentOS搭建FTP服务
- 开始第一段SPRINT
- 多线程---再次认识volatile,Synchronize,lock
- 安装Windows Server 2012 R2提示";unable to create a new system partition or locate an existing system partition";解决方法
- DelaunayTriangulation_VoronoiDiagram_using_OpenCV的实现
- 【校招面试 之 C/C++】第2题 函数模板、类模板、特化、偏特化
- 【刷题】BZOJ 4816 [Sdoi2017]数字表格
- better-scroll不生效原因
热门文章
- java写桌面程序
- mysql update ...select的使用 &; update 遇到 disable safe 的解决方法
- NameError:name &lsquo;xrange&rsquo; is not defined
- Linux下C语言执行shell命令
- spring MVC配置详解(转)
- 范型方法 &; 范型参数 &; 范型返回值
- hdoj:2085
- 每天学点Linux-切割命令split
- 【OSPF】防环机制详解
- DirectX using C++_error X3539:ps1_x is no longer supported...解决方案