并不对劲的bzoj3277
陈年老坑
题意大概是有n个字符串,要求出每一个字符串的所有子串(不包括空串)在所有字符串(包括自身)中出现次数不少于k的有多少个。n,k,字符串总长<=100000。
如果只有一个串的话,非常好办,直接把它建成后缀自动机就行了。
那么不止一个串该怎么办呢?想必是也可以用后缀自动机解决的。这时就要建出一棵Trie树的后缀自动机。
这就是广义呕吐之光后缀自动机
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<cstdio>
#define maxn 200005
using namespace std;
int n,k;
long long c[maxn];
long long ans[maxn];
struct data {
long long son[maxn][26],link[maxn],step[maxn],last,cnt,t[maxn],size[maxn],tp[maxn];
data() {last=cnt=1;}
void extend(int x,int id) {
int p=last,np=last=++cnt;step[np]=step[p]+1;t[np]=id;
while(p&&!son[p][x]) son[p][x]=np,p=link[p];
if(!p) link[np]=1;
else {
int q=son[p][x];
if(step[q]==step[p]+1) link[np]=q;
else {
int nq=++cnt;
memcpy(son[nq],son[q],sizeof(son[q]));
step[nq]=step[p]+1;
link[nq]=link[q];link[np]=link[q]=nq;size[nq]=size[q];tp[nq]=tp[q];
while(p&&son[p][x]==q) son[p][x]=nq,p=link[p];
}
}
for(int i=np;i&&tp[i]!=id;i=link[i]) size[i]++,tp[i]=id;
}
}sam;
int head[maxn],sum;
struct edge {
int to,next;
}e[maxn];
void add(int u,int v) {e[sum].to=v;e[sum].next=head[u];head[u]=sum++;}
char s[maxn];
void dfs(int x) {
c[x]+=c[sam.link[x]];ans[sam.t[x]]+=c[x];
for(int i=head[x];i>=0;i=e[i].next) dfs(e[i].to);
}
int main() {
memset(head,-1,sizeof(head));
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++) {
scanf("%s",s+1);
int len=strlen(s+1);sam.last=1;
for(int j=1;j<=len;j++) sam.extend(s[j]-'a',i);
}
for(int i=2;i<=sam.cnt;i++) {
add(sam.link[i],i);
if(sam.size[i]>=k) c[i]=sam.step[i]-sam.step[sam.link[i]];
}
dfs(1);
for(int i=1;i<=n;i++) printf("%lld ",ans[i]);
}
/*
3 2
abaac
bba
bbacb
*/
宣传一波电教XX,欢迎加入。

并不对劲的bzoj3277的更多相关文章
- 【BZOJ3277】串(后缀自动机)
[BZOJ3277]串(后缀自动机) 题面 BZOJ 题解 广义后缀自动机??? 照着别人的打了一遍.. 相当于每个串都构建一个后缀自动机 构建完一个串之后,直接把当前的last指回root就行了?? ...
- BZOJ3277 串(后缀数组+二分答案+主席树)
因为不会SAM,考虑SA.将所有串连起来并加分隔符,每次考虑计算以某个位置开始的子串有多少个合法. 对此首先二分答案,找到名次数组上的一个区间,那么只需要统计有多少个所给串在该区间内出现就可以了.这是 ...
- [BZOJ3473][BZOJ3277]字符串
[BZOJ3473][BZOJ3277]字符串 试题描述 给定 \(n\) 个字符串,询问每个字符串有多少子串(不包括空串)是所有 \(n\) 个字符串中至少 \(k\) 个字符串的子串? 输入 第一 ...
- 【BZOJ3277/3473】串/字符串 后缀数组+二分+RMQ+双指针
[BZOJ3277]串 Description 字符串是oi界常考的问题.现在给定你n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串(注意包括本身). Inpu ...
- 并不对劲的BJOI2019
一些感想 现实并非游戏,并不支持反复刷关 猎人和防御工事一起被老山龙摧毁了: 猎人惨死雨中,结云村永无放晴之日: 猎人被狂龙病毒侵蚀,天空山上黑蚀龙泛滥. 好像这才是怪物猎人系列的真实结局呢 day ...
- 并不对劲的uoj276. [清华集训2016]汽水
想要很对劲的讲解,请点击这里 题目大意 有一棵\(n\)(\(n\leq 50000\))个节点的树,有边权 求一条路径使该路径的边权平均值最接近给出的一个数\(k\) 输出边权平均值下取整的整数部分 ...
- 并不对劲的DFT
FFT是一个很多人选择背诵全文的算法. #include<algorithm> #include<cmath> #include<complex> #include ...
- 并不对劲的字符串专题(三):Trie树
据说这些并不对劲的内容是<信息学奥赛一本通提高篇>的配套练习. 并不会讲Trie树. 1.poj1056-> 模板题. 2.bzoj1212-> 设dp[i]表示T长度为i的前 ...
- 并不对劲的字符串专题(二):kmp
据说这些并不对劲的内容是<信息学奥赛一本通提高篇>的配套练习. 先感叹一句<信息学奥赛一本通提高篇>上对kmp的解释和matrix67的博客相似度99%(还抄错了),莫非mat ...
随机推荐
- step 1:begin to identify something in english(to becaome a baby again)
long long ago , i think if i want to improve my english especially computer english . i must do so m ...
- hexo干货系列:(一)hexo+gitHub搭建个人独立博客
前言 一直想要一个自己的独立博客,但是觉得申请域名+服务器的太麻烦了就一直没有实现.偶然机会发现Hexo这个优秀的静态博客框架,再搭配现在流行的gitHub,简直是完美写博客的黄金搭档(免费+方便). ...
- Android应用的权限配置和权限列表
权限配置写在Mainifest.xml文件中: <?xml version="1.0" encoding="utf-8"?> <manifes ...
- 6572平台上关于wifi热点切换跳的坑
最近在做一个无屏的项目,需要开启设备的wifi热点,通过连接热点设置设备wifi,本来看起来很容易完成的一件事情,遇到了一下的坑 在wifi切换状态时,大概率出现不能切换的问题,比如从wifi状态切换 ...
- jascript的this
一,this基础 1. 虽然在jascript中一切都是对象,即函数也是一个对象,但在函数中的this并不是指函数本身. 2. 函数中的this指向不是在函数定义时确定的,而是在函数调用时确定的. 3 ...
- Delphi接口使用实例介绍
对于Object Pascal语言来说,最近一段时间最有意义的改进就是从Delphi3开始支持接口(interface),接口定义了能够与一个对象进行交互操作的一组过程和函数.对一个接口进行定义包含两 ...
- Linux 常用但较容易忘记的命令
看死循环 strace -p pid 查看系统版本 cat /etc/issue 设置内核启动版本 /etc/lilo.conf , /boot/grub/grub.conf 设置启动模式 /etc ...
- mybatis批量更新两种方式:1.修改值全部一样 2.修改每条记录值不一样
Mybatis批量更新数据 mybatis批量更新两种方式:1.修改值全部一样 2.修改每条记录值不一样 mybatis批量更新两种方式:1.修改值全部一样 2.修改每条记录值不一样 mybatis批 ...
- A7139 无线通信驱动(STM32) 添加FIFO扩展模式,能够发送超大数据包
A7139 拥有电磁波唤醒以及10mW的发射功率,很easy实现长距离通信,眼下測试有障碍物能够轻松达到300m以上. 通过几天的调试,眼下能够发送随意大小的数据包,大小为1-16KB.所有使用中断收 ...
- Android 通过ADB Wireless无线调试应用
使用数据线调试应用难免不方便,本篇博客介绍使用ADB Wireless工具.当手机和电脑处在同一网络下.实现无线调试应用. ADB Wireless可以让手机用无线来代替USB连接.而使用ADB工具的 ...