1009 失恋的小 T(后缀数组¥)
1009: 失恋的小 T
时间限制: 1 Sec 内存限制: 128 MB
提交: 160 解决: 76
[提交][状态][讨论版]
题目描述
小 T 在网上拿到了代表大千世界的长字符串,删掉了所有换行空格和标点符号,只剩下了小写字母。
现在字符串中有好多重复的子串,相同子串里只有一个是 Real 的。
为了让小 T 走出失恋,你一定要告诉他这个世界上 Real 的东西有多少。
(子串:串中任意个连续的字符组成的子序列称为该串的子串)
输入
输出
样例输入
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(后缀数组¥)的更多相关文章
- 【bzoj5073】[Lydsy1710月赛]小A的咒语 后缀数组+倍增RMQ+贪心+dp
题目描述 给出 $A$ 串和 $B$ 串,从 $A$ 串中选出至多 $x$ 个互不重合的段,使得它们按照原顺序拼接后能够得到 $B$ 串.求是否可行.多组数据. $T\le 10$ ,$|A|,|B| ...
- BZOJ 4199: [Noi2015]品酒大会 [后缀数组 带权并查集]
4199: [Noi2015]品酒大会 UOJ:http://uoj.ac/problem/131 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品 ...
- BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]
1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1383 Solved: 582[Submit][St ...
- POJ1743 Musical Theme [后缀数组]
Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 27539 Accepted: 9290 De ...
- 后缀数组(suffix array)详解
写在前面 在字符串处理当中,后缀树和后缀数组都是非常有力的工具. 其中后缀树大家了解得比较多,关于后缀数组则很少见于国内的资料. 其实后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现, ...
- (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 ...
- hihoCoder 后缀数组 重复旋律
#1403 : 后缀数组一·重复旋律 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为长度为 N 的数构成 ...
- 后缀数组:倍增法和DC3的简单理解
一些定义:设字符串S的长度为n,S[0~n-1]. 子串:设0<=i<=j<=n-1,那么由S的第i到第j个字符组成的串为它的子串S[i,j]. 后缀:设0<=i<=n- ...
- POJ 3415 Common Substrings 后缀数组+并查集
后缀数组,看到网上很多题解都是单调栈,这里提供一个不是单调栈的做法, 首先将两个串 连接起来求height 求完之后按height值从大往小合并. height值代表的是 sa[i]和sa[i ...
随机推荐
- Linux python3安装/shell脚本/if/循环/函数
python3安装 安装过程 安装包: wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgztar -xvf Python-3.7 ...
- STL学习笔记— —容器map和multimap
简单介绍 在头文件<map> 中定义 namespace std { template <typename Key, typename T, typename Compare = l ...
- linux 安装zip/unzip/g++/gdb/vi/vim等软件
近期公司新配置了一台64位云server.去部署的时候发现,没有安装zip/unzip压缩解压软件. 于是仅仅好自己安装这两个软件.linux最好用的还是yum. 两个指令就安装好了. 首先把软件安装 ...
- BAPI_ACC_DOCUMENT_POST 解决原因代码输入问题-利用BADI
(1) 复制函数SAMPLE_INTERFACE_RWBAPI01为Z SAMPLE_INTERFACE_RWBAPI01 *"---------------------------- ...
- 深度学习2--安装opencv3.1
1\opencv的安装参考视频 2\ 以下内容来自:http://blog.csdn.net/l18930738887/article/details/54696148 本人因为被坑过,所以建议各位最 ...
- UI控件之UITextField
UITextField:文本框:用来输入一行文本,父类是UIControl UITextField *field1=[[UITextField alloc]initWithFrame:CGRectMa ...
- 028_MapReduce中的计数器Counter的使用
一.分析运行wordcount程序屏幕上打印信息 ##运行wordcount单词频率统计程序,基于输出输出路径. [hadoop@hadoop-master hadoop-1.2.1]$ hadoop ...
- String和StringBufffer的区别
string的字符串操作都是废弃已有的对象,开辟一个新的内存空间创建一个新的对象 比如一个string str= "字符串"; str += "a"; 这样的操 ...
- verilog中一些基本的门电路如pmos和nmos等
最近在分析波形的时候,发现某个PAD模型的行为与想象的不一致,就进入stdcell里面看了下,主要是pmos和nmos相关的东西,暂列如下: 开关级基元14种 是实际的MOS关的抽象表示,分电阻型(前 ...
- AWK的行循环控制
1.控制函数:next,getline,exit. next: 该行的action运行到next就停止,读取下一行. getline:1.没有"<"或“|”的情况下 ...