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. 我的Android进阶之旅------>【强力推荐】Android开源图表库XCL-Charts版本发布及展示页

    因为要做图表相关的应用,后来百度发现了一个很好的Android开源图表库(XCL-Charts is a free charting library for Android platform.) 下面 ...

  2. 使用 adb logcat 显示 Android 日志

    本文为转载.  地址:http://www.hanshuliang.com/?post=32 eclipse 自带的 LogCat 工具太垃圾了, 开始用 adb logcat 在终端查看日志; 1. ...

  3. MySql存储过程、函数

    存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程和函数可以避免开发人员重复的编写相同的SQL语句.而且,存储过程和函数是在MyS ...

  4. CoreThink主题开发(八)使用H-ui开发博客主题之用户登录之前及登录之后

    感谢H-ui.感谢CoreThink! 效果图: 登录之后 登录窗体 想做登录之后的下拉菜单的,实在做不出来了,就一般显示了... 整个面包屑导航这里,先遍历模块,并且是允许前台显示的模块,之后就是判 ...

  5. 剑指offer 面试28题

    面试28题: 题目:对称的二叉树题: 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的 解题思路: 可以定义一种遍历算法,先遍历右子节点再遍 ...

  6. $.messager.confirm修改弹出框按钮提示文字

    $.messager.confirm 默认提示语为“OK”和“Cancel”.引入中文控件后变为“确定”和“取消” <script src="../js/locale/easyui-l ...

  7. CSS3 animation-iteration-count:infinite

    原文:http://www.w3chtml.com/css3/properties/animation/animation-iteration-count.html animation-iterati ...

  8. PAT 天梯赛 L1-025. 正整数A+B 【字符串处理】

    题目链接 https://www.patest.cn/contests/gplt/L1-025 思路 注意 输入字符串B的时候 要用getline 因为 可能存在空格 然后就把字符串 转化成 数字 并 ...

  9. 面对 to B 业务该如何构建研发管理体系?

    未来离我们越来越近,而过去并未走远,我们发现科技公司2B业务兴起,腾讯认为互联网下半场属于产业互联网,需要进行一次重要的战略升级.它们在国庆节最后一天进行新一轮组织架构调整,最亮眼的就是新成立云与智慧 ...

  10. 大数据架构之:Kafka

    Kafka 是一个高吞吐.分布式.基于发布订阅的消息系统,利用Kafka技术可在廉价PC Server上搭建起大规模消息系统.Kafka具有消息持久化.高吞吐.分布式.多客户端支持.实时等特性,适用于 ...