传送门

这道题是一模一样的。

于是本蒟蒻又写了一遍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: 串(后缀自动机+启发式合并)的更多相关文章

  1. 2018.12.22 bzoj3473: 字符串(后缀自动机+启发式合并)

    传送门 调代码调的我怀疑人生. 启发式合并用迭代写怎么都跑不过(雾 换成了dfsdfsdfs版本的终于过了233. 题意简述:求给出nnn个字串,对于每个给定的字串求出其有多少个字串在至少kkk个剩下 ...

  2. loj#6041. 「雅礼集训 2017 Day7」事情的相似度(后缀自动机+启发式合并)

    题面 传送门 题解 为什么成天有人想搞些大新闻 这里写的是\(yyb\)巨巨说的启发式合并的做法(虽然\(LCT\)的做法不知道比它快到哪里去了--) 建出\(SAM\),那么两个前缀的最长公共后缀就 ...

  3. BZOJ 2946: [Poi2000]公共串( 后缀自动机 )

    一个串建后缀自动机, 其他串在上面跑, 然后用当前串跑的去更新全部 ------------------------------------------------------------------ ...

  4. bzoj 2946 [Poi2000]公共串——后缀自动机

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2946 对每个串都建一个后缀自动机,然后 dfs 其中一个自动机,记录同步的话在别的自动机上走 ...

  5. 【bzoj2946】[Poi2000]公共串 后缀自动机

    [Poi2000]公共串 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1386  Solved: 620[Submit][Status][Discus ...

  6. BZOJ 2946 [Poi2000]公共串 ——后缀自动机

    任意选择一个串作为模式串,构建出后缀自动机. 然后用其他的串在后缀自动机上跑匹配. 然后就到了理解后缀自动机性质的时候. 在某一个节点的最大值是可以沿着parent树上传的. 然后用dp[i][j]表 ...

  7. bzoj 2946 公共串 —— 后缀自动机

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2946 建出 n-1 个后缀自动机一起跑呗. 代码如下: #include<cstdio ...

  8. LOJ#6503.「雅礼集训 2018 Day4」Magic[容斥+NTT+启发式合并]

    题意 \(n\) 张卡牌 \(m\) 种颜色,询问有多少种本质不同的序列满足相邻颜色相同的位置数量等于 \(k\). 分析 首先本质不同不好直接处理,可以将同种颜色的卡牌看作是不相同的,求出答案后除以 ...

  9. 2018.12.22 spoj7258 Lexicographical Substring Search(后缀自动机)

    传送门 samsamsam基础题. 题意简述:给出一个串,询问第kkk大的本质不同的串. 然而这就是弦论的简化版. 我们把samsamsam建出来然后贪心选择就行了. 代码: #include< ...

随机推荐

  1. MysqlMd5加密

    MD5加密成功

  2. c# 文件过大时清空原有内容重新写入

    FileStream fs = new FileStream("E:\\Test\\HistoryData.txt", FileMode.Append, FileAccess.Wr ...

  3. http://www.bugku.com:Bugku——变量1(http://120.24.86.145:8004/index1.php)

           之前立志做出需要编码解决和时间相关的那道CTF题目,但是这次没找到,相关人士找到了麻烦告诉我一声.本次再学习一下子关于正则表达式和PHP的相关知识.开课咯-.-   刚看题目就发现提示, ...

  4. 安装vCenter server 6.0

    注意,5.5的还可以直接把iso里的ova直接导入为模板,6.0之后的要拉到Windows下安装. 总路线 ESXI是服务器系统,用vsphere client连接,在client里新建一个虚拟机为W ...

  5. android轮播图的实现原理

    1.轮播图的点:RadioGroup,根据网络请求的数据,解析得到的图片的个数,设置RadioGroup的RadioButton的个数. 2.轮播图的核心技术:用Gallery来存放图片,设置适配器. ...

  6. 检测Android手机的IP地址

    package com.jason.demo.androidip; import android.content.Context; import android.net.DhcpInfo; impor ...

  7. SideBar 选择城市时右侧边上的 选择bar

    需要定义一个SideBar的视图类  在布局文件中引用   同时在布局中设置一个textView默认不可见 当触摸时才显示   在调用的Activity中 sideBar.setOnTouchingL ...

  8. Split Array into Consecutive Subsequences

    659. Split Array into Consecutive Subsequences You are given an integer array sorted in ascending or ...

  9. bootstrap日历控件

    bootstrap的日历控件: <link href="~/bootstrap/css/bootstrap.min.css" rel="stylesheet&quo ...

  10. IDEA安装小配置

    1. view-->toolbar+toolbuttons 2. 根据大小写IDEA能准确提示 配置自动导入包 定义代码模板 提示忽略大小写 配置虚拟机内存,修改idea64.exe.vmopt ...