spoj705(sa
来源:互联网 发布:java swing 日历控件 编辑:程序博客网 时间:2024/04/29 21:19
/* *Author: Zhaofa Fang *Created time: 2013-04-21-21.19 *Language: C++ */#include <cstdio>#include <cstdlib>#include <sstream>#include <iostream>#include <cmath>#include <cstring>#include <algorithm>#include <string>#include <utility>#include <vector>#include <queue>#include <map>#include <set>using namespace std;typedef long long ll;#define DEBUG(x) cout<< #x << ':' << x << endl#define FOR(i,s,t) for(int i = (s);i <= (t);i++)#define FORD(i,s,t) for(int i = (s);i >= (t);i--)#define REP(i,n) FOR(i,0,n-1)#define REPD(i,n) FORD(i,n-1,0)#define PII pair<int,int>#define PB push_back#define MP make_pair#define ft first#define sd second#define lowbit(x) (x&(-x))#define INF (1<<30)const int maxn = 1111;char s[maxn];int sa[maxn],t1[maxn],t2[maxn],c[maxn];int rank[maxn],height[maxn];void getHeight(int n){ int k = 0; for(int i=1;i<=n;i++)rank[sa[i]] = i; for(int i=0;i<n;i++){ if(k)k--; int j = sa[rank[i]-1]; while(s[i+k]==s[j+k])k++; height[rank[i]] = k; }}bool cmp(int *r,int a,int b,int l){ return (r[a]==r[b] && r[a+l]==r[b+l]);}void build_sa(int m,int n){ int i,*x=t1,*y=t2,k,p; for( i=0;i<m;i++)c[i] = 0; for( i=0;i<n;i++)c[x[i] = s[i]]++; for( i=1;i<m;i++)c[i] += c[i-1]; for( i=n-1;i>=0;i--)sa[-- c[x[i]]] = i; for(k=1,p=0;p<n;m=p,k<<=1){ p = 0; for(i=n-k;i<n;i++)y[p++] = i; for(i=0;i<n;i++)if(sa[i]>=k)y[p++] = sa[i]-k; for(i=0;i<m;i++)c[i] = 0; for(i=0;i<n;i++)c[x[y[i]]]++; for(i=1;i<m;i++)c[i] += c[i-1]; for(i=n-1;i>=0;i--)sa[--c[x[y[i]]]] = y[i]; swap(x,y); p = 1; x[sa[0]] = 0; for(i=1;i<n;i++) x[sa[i]] = cmp(y,sa[i-1],sa[i],k)?p-1:p++; } getHeight(n-1);}int solve(int n){ int ans = n - sa[1]; for(int i=2;i<=n;i++){ ans += n-sa[i]-height[i]; } return ans;}int main(){ //freopen("in","r",stdin); //freopen("out","w",stdout); int T; cin>>T; while(T--){ scanf("%s",s); int n = strlen(s); build_sa(255,n+1); printf("%d\n",solve(n)); } return 0;}
0 0
- spoj705(sa
- SA
- sa
- sa
- sa
- sa
- sa
- sa
- sa
- SA
- sa
- sa
- sa
- sa
- sa
- sa
- sa
- sa
- 关于UISearchBar在IOS6和IOS7的区别以及用法注意
- MAC下XAMPP配置Django的MYSQL驱动
- 怎样查出SQLServer的性能瓶颈
- 使用Linux的MD5 API
- MySql字符修改
- spoj705(sa
- 教你怎样把jpg转换成pdf格式
- Matlab数据处理(3)
- 【BZOJ】【P2083】【Poi2010】【Intelligence test】【题解】【二分】
- 解决 silverlight 安装错误:提示消息ID1603 的方法
- 从cvs导入Android项目,运行报错:Conversion to Dalvik format failed: Unable to execute dex的解决方法
- 公告:下载频道C币系统上线(暂行版)
- 微软智能机弃用诺基亚品牌 功能机扔沿用
- android的一些控件