2018.12.22 bzoj3277: 串(后缀自动机+启发式合并)
传送门
跟这道题是一模一样的。
于是本蒟蒻又写了一遍10min1A庆祝
代码:
#include<bits/stdc++.h>
#define ri register int
using namespace std;
const int N=2e5+5;
typedef long long ll;
int T,k;
string s[N];
struct SAM{
int last,tot,len[N],son[N][26],link[N],val[N];
vector<int>e[N];
set<int>S[N];
SAM(){last=tot=1,len[0]=-1,fill(son[0],son[0]+26,1);}
inline void expand(int x,int id){
int p=last,np=++tot;
S[last=np].insert(id),len[np]=len[p]+1;
while(!son[p][x])son[p][x]=np,p=link[p];
if(!p){link[np]=1;return;}
int q=son[p][x],nq;
if(len[q]==len[p]+1){link[np]=q;return;}
len[nq=++tot]=len[p]+1,memcpy(son[nq],son[q],sizeof(son[q])),link[nq]=link[q],link[q]=link[np]=nq;
while(son[p][x]==q)son[p][x]=nq,p=link[p];
}
inline void merge(int x,int y){
if(S[x].size()<S[y].size())swap(S[x],S[y]);
for(set<int>::iterator it=S[y].begin();it!=S[y].end();++it)S[x].insert(*it);
}
inline void dfs(int p){for(ri i=0;i<e[p].size();++i)dfs(e[p][i]),merge(p,e[p][i]);val[p]=S[p].size();}
inline void solve(){for(ri i=1;i<=tot;++i)if(link[i])e[link[i]].push_back(i);dfs(1);}
inline ll query(int id){
int p=1,up=s[id].size();
ll ret=0;
for(ri i=0;i<up;++i){
p=son[p][s[id][i]-'a'];
while(val[p]<k)p=link[p];
ret+=len[p];
}
return ret;
}
}sam;
int main(){
scanf("%d%d",&T,&k);
if(k>T){for(ri i=1;i<=T;++i)cout<<"0 ";return 0;}
for(ri i=1,n;i<=T;++i){
cin>>s[i],n=s[i].size();
for(ri j=0;j<n;++j)sam.expand(s[i][j]-'a',i);
sam.last=1;
}
sam.solve();
for(ri i=1;i<=T;++i)cout<<sam.query(i)<<' ';
return 0;
}
2018.12.22 bzoj3277: 串(后缀自动机+启发式合并)的更多相关文章
- 2018.12.22 bzoj3473: 字符串(后缀自动机+启发式合并)
传送门 调代码调的我怀疑人生. 启发式合并用迭代写怎么都跑不过(雾 换成了dfsdfsdfs版本的终于过了233. 题意简述:求给出nnn个字串,对于每个给定的字串求出其有多少个字串在至少kkk个剩下 ...
- loj#6041. 「雅礼集训 2017 Day7」事情的相似度(后缀自动机+启发式合并)
题面 传送门 题解 为什么成天有人想搞些大新闻 这里写的是\(yyb\)巨巨说的启发式合并的做法(虽然\(LCT\)的做法不知道比它快到哪里去了--) 建出\(SAM\),那么两个前缀的最长公共后缀就 ...
- BZOJ 2946: [Poi2000]公共串( 后缀自动机 )
一个串建后缀自动机, 其他串在上面跑, 然后用当前串跑的去更新全部 ------------------------------------------------------------------ ...
- bzoj 2946 [Poi2000]公共串——后缀自动机
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2946 对每个串都建一个后缀自动机,然后 dfs 其中一个自动机,记录同步的话在别的自动机上走 ...
- 【bzoj2946】[Poi2000]公共串 后缀自动机
[Poi2000]公共串 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1386 Solved: 620[Submit][Status][Discus ...
- BZOJ 2946 [Poi2000]公共串 ——后缀自动机
任意选择一个串作为模式串,构建出后缀自动机. 然后用其他的串在后缀自动机上跑匹配. 然后就到了理解后缀自动机性质的时候. 在某一个节点的最大值是可以沿着parent树上传的. 然后用dp[i][j]表 ...
- bzoj 2946 公共串 —— 后缀自动机
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2946 建出 n-1 个后缀自动机一起跑呗. 代码如下: #include<cstdio ...
- LOJ#6503.「雅礼集训 2018 Day4」Magic[容斥+NTT+启发式合并]
题意 \(n\) 张卡牌 \(m\) 种颜色,询问有多少种本质不同的序列满足相邻颜色相同的位置数量等于 \(k\). 分析 首先本质不同不好直接处理,可以将同种颜色的卡牌看作是不相同的,求出答案后除以 ...
- 2018.12.22 spoj7258 Lexicographical Substring Search(后缀自动机)
传送门 samsamsam基础题. 题意简述:给出一个串,询问第kkk大的本质不同的串. 然而这就是弦论的简化版. 我们把samsamsam建出来然后贪心选择就行了. 代码: #include< ...
随机推荐
- String int 相互转换
String->int: int i = Integer.parseInt(s) int->String: String s = Integer.toString(i)
- WIN7,安装所以软件都提示error writing temporary file
执行: icacls C:\Users\Administrator\Desktop /setintegritylevel H
- am start的总结,-d参数的总结,以及python中传递内容包含中文及特殊字符&的解决方案
一.am start的内容的整理 主要包含以下内容:am start的常规操作及参数的含义,-d 参数的含义,以及如何在APK中设置参数获取 使用命令如下:adb shell am start -n ...
- TZOJ 3665 方格取数(2)(最大点权独立集)
描述 给你一个m*n的格子的棋盘,每个格子里面有一个非负数. 从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取数所在的2个格子不能相邻,并且取出的数的和最大. 输入 包括多个测试实例 ...
- 项目总结10:通过反射解决springboot环境下从redis取缓存进行转换时出现ClassCastException异常问题
通过反射解决springboot环境下从redis取缓存进行转换时出现ClassCastException异常问题 关键字 springboot热部署 ClassCastException异常 反射 ...
- JD_M案例知识点(移动端)
# JD_M案例知识点 基础布局+顶部通栏+顶部轮播图+导航栏 知识点 base.css ::before,::after 伪元素 统一设置文字 sans-serif 移动端 的默认字体 font-f ...
- (六)ROS话题---节点之间通信的方式
1. 理解 ROS 话题: (Ctrl+Alt+T 打开一个新终端) 运行下面的命令: $ roscore (Ctrl+Alt+T 打开一个新终端) $ rosrun turtlesim turtle ...
- ubuntu远程桌面、VNC(转载)
VNC 远程桌面 配置/使用 for xfce 本贴主要目的为说明如何在windows系统下远程控制xfce桌面 Ubuntu 的默认GNOME桌面可以在系统设置中直接打开远程桌面,然后用Window ...
- Oracle_PL/SQL(9) 例外处理
例外处理1.例外分类:预定义例外,非预定义例外,自定义例外三种传递例外:如果在例外处理部分exception没有捕捉例外,oracle会将例外传递到调用环境.捕捉并处理例外:使用例外处理部分完成exc ...
- Spring Boot 2.0(二):Spring Boot 开源软件都有哪些?(转)
2016年 Spring Boot 还没有被广泛使用,在网上查找相关开源软件的时候没有发现几个,到了现在经过2年的发展,很多互联网公司已经将 Spring Boot 搬上了生产,而使用 Spring ...