1009: 失恋的小 T

时间限制: 1 Sec  内存限制: 128 MB
提交: 160  解决: 76
[提交][状态][讨论版]

题目描述

小 T 最近失恋了,开始怀疑人生和爱情,他想知道在这世界中去伪存真后还剩多少。 
小 T 在网上拿到了代表大千世界的长字符串,删掉了所有换行空格和标点符号,只剩下了小写字母。 
现在字符串中有好多重复的子串,相同子串里只有一个是 Real 的。 
为了让小 T 走出失恋,你一定要告诉他这个世界上 Real 的东西有多少。 
(子串:串中任意个连续的字符组成的子序列称为该串的子串) 

输入

包含 100 组输入,每组为一行字符串,只包含小写字母,长度 1-5000。 

输出

输出 100 行,每行一个整数,对应输入的答案。 

样例输入

aaba

样例输出

8

提示

后缀数组,

我还不会,,

 #include<iostream>
#include<stdio.h>
#include<math.h>
#include <string>
#include<string.h>
#include<map>
#include<queue>
#include<set>
#include<utility>
#include<vector>
#include<algorithm>
#include<stdlib.h>
using namespace std;
#define maxn 200100
#define maxm 200005
#define rd(x) scanf("%d", &x)
#define rd2(x, y) scanf("%d%d", &x, &y)
#define mod 1000000007
const int MAXN = ;
int t1[MAXN],t2[MAXN],c[MAXN];
bool cmp(int *r, int a,int b,int l){
return r[a] ==r[b] && r[a+l] == r[b+l];
}
void da(int str[], int sa[], int rankk[], int height[], int n, int m){
n++;
int i,j,p,*x =t1,*y=t2;
for(i =; i <m; i++) c[i] =;
for(i = ; i <n; i++) c[x[i] =str[i]]++;
for(i =; i < m; i++) c[i] += c[i-];
for(i = n-;i >= ; i--) sa[--c[x[i]]] = i;
for(j =; j <= n; j <<=){
p =;
for(i = n-j; i <n; i++) y[p++] = i;
for(i = ; i < n; i++) if(sa[i] >= j) y[p++] = sa[i] -j; for(i = ; i < m; i++) c[i] =;
for(i = ;i < n; i++) c[x[y[i]]]++;
for(i = ; i < m; i++) c[i] += c[i-];
for(i = n-; i >=; i--) sa[--c[x[y[i]]]] = y[i];
swap(x,y);
p =; x[sa[]] =;
for(int i = ; i < n; i++) x[sa[i]] = cmp(y, sa[i-], sa[i], j)?p-:p++;
if(p >= n) break;
m =p;
}
int k =;
n--;
for(i = ; i <= n;i++) rankk[sa[i]] = i;
for(i = ; i < n;i++){
if(k) k--;
j =sa[rankk[i]-];
while(str[i+k] == str[j+k]) k++;
height[rankk[i]] = k;
}
}
int rankk[MAXN],height[MAXN];
char str[MAXN];
int r[MAXN],sa[MAXN];
int main()
{
int t = ;
while(~scanf("%s", str)){
//scanf("%s", str);
int len = strlen(str);
//int n = 2*len +1;
for(int i =; i < len ;i++) r[i] = str[i];
//for(int i =0; i < len; i++) r[len + 1 + i] = str[len -1 -i];
r[len] =;
r[len+] = ;
da(r, sa, rankk, height, len , 'z' + );
long long int res = len - sa[];
for(int i= ;i <= len; i++){
res = res + len - sa[i] -height[i];
}
printf("%lld\n", res);
}
return ;
}

1009 失恋的小 T(后缀数组¥)的更多相关文章

  1. 【bzoj5073】[Lydsy1710月赛]小A的咒语 后缀数组+倍增RMQ+贪心+dp

    题目描述 给出 $A$ 串和 $B$ 串,从 $A$ 串中选出至多 $x$ 个互不重合的段,使得它们按照原顺序拼接后能够得到 $B$ 串.求是否可行.多组数据. $T\le 10$ ,$|A|,|B| ...

  2. BZOJ 4199: [Noi2015]品酒大会 [后缀数组 带权并查集]

    4199: [Noi2015]品酒大会 UOJ:http://uoj.ac/problem/131 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品 ...

  3. BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]

    1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1383  Solved: 582[Submit][St ...

  4. POJ1743 Musical Theme [后缀数组]

    Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 27539   Accepted: 9290 De ...

  5. 后缀数组(suffix array)详解

    写在前面 在字符串处理当中,后缀树和后缀数组都是非常有力的工具. 其中后缀树大家了解得比较多,关于后缀数组则很少见于国内的资料. 其实后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现, ...

  6. (HDU 5558) 2015ACM/ICPC亚洲区合肥站---Alice's Classified Message(后缀数组)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5558 Problem Description Alice wants to send a classi ...

  7. hihoCoder 后缀数组 重复旋律

    #1403 : 后缀数组一·重复旋律 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为长度为 N 的数构成 ...

  8. 后缀数组:倍增法和DC3的简单理解

    一些定义:设字符串S的长度为n,S[0~n-1]. 子串:设0<=i<=j<=n-1,那么由S的第i到第j个字符组成的串为它的子串S[i,j]. 后缀:设0<=i<=n- ...

  9. POJ 3415 Common Substrings 后缀数组+并查集

    后缀数组,看到网上很多题解都是单调栈,这里提供一个不是单调栈的做法, 首先将两个串 连接起来求height   求完之后按height值从大往小合并.  height值代表的是  sa[i]和sa[i ...

随机推荐

  1. django startapp报 maximum recursion depth exceeded

    报错截图如下: 解决办法:修改指定路径下的functools.py文件的def total_ordering(cls):方法: 原来的样子: convert = { '__lt__': [('__gt ...

  2. 如何在Pycharm设置ES6语法环境

    首先 如果不进行相关设置就刚ES6 语法的话,会出现下面提示性错误(运行还是能正常出效果的): (let 飘红, 这只是其中之一, 其他语法也会飘红) 接着,就是解决问题: 首先打开设置: 接着找到下 ...

  3. spring(13)------全面深入解析spring的AOP

    一,AOP的基本思想 AOP(Aspect Oriented Programming)翻译成中文的大意是面向切面编程,主要目的解决让不该牵扯在一起的代码分离开来. (1)认识AOP 应用程序中通常包含 ...

  4. Android学习资源网站大全

    https://github.com/zhujun2730/Android-Learning-Resources 整理了一些 Android 的博客链接.学习资源网站.站在巨人的肩膀上,会看得更远.整 ...

  5. python之网络socket编程

    一.网络协议 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构(互联网中处处是C/S架构):B/S架构也是C/S架构的一种,B/S是浏览器/服务器 C/S架构与socket的关系: ...

  6. Mapinfo修改道路方向

    在mapinfp工具管理添加插件Reverse Line Direction,就可以修改道路方向 插件

  7. python的PIL模块安装

    一.Centos安装PIL #尤其重要,否则会报错 yum install python-devel yum install libjpeg libjpeg-devel zlib zlib-devel ...

  8. 寻找最大(小)的K个数

    <<编程之美>>一书中提到了寻找最大的K个数的问题,问题可以简单描述为:在长度为N的数组中,寻找第K(K<N)个最大的数.问题的解法涉及到了很多排序算法,对我们理解和运用 ...

  9. c# 接口(interface)与接口应用

    using System; using System.Collections.Generic; using System.Linq; using System.Text; //接口(interface ...

  10. 【HackerRank】Service Lane

     Calvin is driving his favorite vehicle on the 101 freeway. He notices that the check engine light o ...