http://www.spoj.com/problems/NSUBSTR/

clj课件里的例题

用结构体+指针写完模板后发现要访问所有的节点,改成数组会更方便些。。于是改成了数组。。。

这道题重点是求一个状态的\(|Right|\)值,只要用parent树中当前节点的所有孩子来更新它即可。

为了保证一个节点的parent一定被所有孩子全部更新,需要保证在序列中一个节点的parent一定在它的左边(从右往左扫来更新)。

这就需要对\(val\)值排序,因为spoj时限卡得紧,所以用基数排序。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 1000003; int val[N], par[N], go[N][26], tot = 1, root = 1, last = 1; void extend(int w) {
int p = last, np = ++tot;
val[np] = val[p] + 1;
while (p && go[p][w] == 0)
go[p][w] = np, p = par[p];
if (p == 0) par[np] = root;
else {
int q = go[p][w];
if (val[p] + 1 == val[q]) par[np] = q;
else {
int nq = ++tot; val[nq] = val[p] + 1;
memcpy(go[nq], go[q], sizeof(go[q]));
par[nq] = par[q];
par[q] = par[np] = nq;
while (p && go[p][w] == q)
go[p][w] = nq, p = par[p];
}
}
last = np;
} int len, r[N], a[250003], id[N], c[250003], f[250003];
char s[250003];
int main() {
scanf("%s", s + 1);
len = strlen(s + 1);
for(int i = 1; i <= len; ++i)
a[i] = s[i] - 'a', extend(a[i]);
int tmp = root;
for(int i = 1; i <= len; ++i) {
tmp = go[tmp][a[i]];
r[tmp] = 1;
}
for(int i = 1; i <= tot; ++i)
++c[val[i]];
for(int i = 1; i <= len; ++i)
c[i] += c[i - 1];
for(int i = 1; i <= tot; ++i)
id[c[val[i]]--] = i;
for(int i = tot; i >= 1; --i)
r[par[id[i]]] += r[id[i]];
for(int i = 1; i <= tot; ++i)
f[val[i]] = max(f[val[i]], r[i]);
for(int i = len; i >= 1; --i)
f[i - 1] = max(f[i], f[i - 1]);
for(int i = 1; i <= len; ++i)
printf("%d\n", f[i]);
return 0;
}

【SPOJ 8222】Substrings的更多相关文章

  1. 【spoj NSUBSTR】 Substrings

    http://www.spoj.com/problems/NSUBSTR/ (题目链接) 题意 给出一个字符串S,令${F(x)}$表示S的所有长度为x的子串出现次数的最大值.求${F(1)..... ...

  2. 【SPOJ -NSUBSTR】Substrings 【后缀自动机+dp】

    题意 给出一个字符串,要你找出所有长度的子串分别的最多出现次数. 分析 我们建出后缀自动机,然后预处理出每个状态的cnt,cnt[u]指的是u这个状态的right集合大小.我们设f[len]为长度为l ...

  3. 【 SPOJ - GRASSPLA】 Grass Planting (树链剖分+树状数组)

    54  种草约翰有 N 个牧场,编号为 1 到 N.它们之间有 N − 1 条道路,每条道路连接两个牧场.通过这些道路,所有牧场都是连通的.刚开始的时候,所有道路都是光秃秃的,没有青草.约翰会在一些道 ...

  4. 【刷题】SPOJ 8222 NSUBSTR - Substrings

    You are given a string S which consists of 250000 lowercase latin letters at most. We define F(x) as ...

  5. 【SPOJ 694】Distinct Substrings (更直接的求法)

    [链接]h在这里写链接 [题意] 接上一篇文章 [题解] 一个字符串所有不同的子串的个数=∑(len-sa[i]-height[i]) [错的次数] 0 [反思] 在这了写反思 [代码] #inclu ...

  6. 【SPOJ 694】Distinct Substrings

    [链接]h在这里写链接 [题意]     给你一个长度最多为1000的字符串     让你求出一个数x,这个x=这个字符串的不同子串个数; [题解]     后缀数组题.     把原串复制一份,加在 ...

  7. 【spoj SUBST1】 New Distinct Substrings

    http://www.spoj.com/problems/SUBST1/ (题目链接) 题意 求字符串的不相同的子串个数 Solution 后缀数组论文题. 每个子串一定是某个后缀的前缀,那么原问题等 ...

  8. 【SPOJ – SUBST1】New Distinct Substrings 后缀数组

    New Distinct Substrings 题意 给出T个字符串,问每个字符串有多少个不同的子串. 思路 字符串所有子串,可以看做由所有后缀的前缀组成. 按照后缀排序,遍历后缀,每次新增的前缀就是 ...

  9. 【SPOJ 694】Distinct Substrings 不相同的子串的个数

    不会FQ啊,没法评测啊,先存一下代码QAQ 2016-06-16神犇Menci帮我测过AC了,谢谢神犇Menci QwQ #include<cstdio> #include<cstr ...

随机推荐

  1. C++11 之 override

    1  公有继承 派生类公有继承自 (public inheritance) 基类,继承包含两部分:一是函数的 "接口" (interface),二是函数的 "实现&quo ...

  2. Java虚拟机详解----JVM常见问题总结

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  3. VIJOS P1426兴奋剂检查[DP 状态哈希]

    背景 北京奥运会开幕了,这是中国人的骄傲和自豪,中国健儿在运动场上已经创造了一个又一个辉煌,super pig也不例外……………… 描述 虽然兴奋剂是奥运会及其他重要比赛的禁药,是禁止服用的.但是运动 ...

  4. KEngine策划指南:配置表格的编辑与编译

    策划与程序的桥梁 执行策划在游戏开发的过程中的主要工作是什么?当然就是和Excel打交道了.大量的Excel数据表,最终会被演变成游戏的配置数据.日常游戏开发中,策划编辑配置表一般有两种方式: 编译式 ...

  5. TestLink学习二:Windows搭建TestLink环境

    环境准备: 搭建php5.4.39+apache2.2+mysq5.5.28l环境 (可参考http://www.cnblogs.com/yangxia-test/p/4414161.html) (注 ...

  6. JS获取当前页面的URL信息

    设置或获取对象指定的文件名或路径. <script> alert(window.location.pathname) </script> 设置或获取整个 URL 为字符串. & ...

  7. Android ART运行时与Dalvik虚拟机

    这几天在做一个项目时需要在Android中使用OSGi框架(Apache Felix),于是在一个android 4.4.2 版本系统的某品牌的平板上实验. 实验内容很简单:把felix包里的feli ...

  8. 用nodejs搭建一个简单的服务器

    使用nodejs搭建一个简单的服务器 nodejs优点:性能高(读写文件) 数据操作能力强 官网:www.nodejs.org 验证是否安装成功:cmd命令行中输入node -v 如果显示版本号表示安 ...

  9. js模拟高级语言的重载

    js以递归的方式模拟高级语言的重载,我以添加元素节点为例子: //现有的子元素之前插入一个新的子元素 var before = function(elem,newElement,targetEleme ...

  10. Broadmann分区

    来源: http://blog.sina.com.cn/s/blog_60a751620100k2hj.html Brodmann areas Name 中文名 Function 1 Somatose ...