传送门

这道题是一模一样的。

于是本蒟蒻又写了一遍10min1A庆祝

代码:

  1. #include<bits/stdc++.h>
  2. #define ri register int
  3. using namespace std;
  4. const int N=2e5+5;
  5. typedef long long ll;
  6. int T,k;
  7. string s[N];
  8. struct SAM{
  9. int last,tot,len[N],son[N][26],link[N],val[N];
  10. vector<int>e[N];
  11. set<int>S[N];
  12. SAM(){last=tot=1,len[0]=-1,fill(son[0],son[0]+26,1);}
  13. inline void expand(int x,int id){
  14. int p=last,np=++tot;
  15. S[last=np].insert(id),len[np]=len[p]+1;
  16. while(!son[p][x])son[p][x]=np,p=link[p];
  17. if(!p){link[np]=1;return;}
  18. int q=son[p][x],nq;
  19. if(len[q]==len[p]+1){link[np]=q;return;}
  20. len[nq=++tot]=len[p]+1,memcpy(son[nq],son[q],sizeof(son[q])),link[nq]=link[q],link[q]=link[np]=nq;
  21. while(son[p][x]==q)son[p][x]=nq,p=link[p];
  22. }
  23. inline void merge(int x,int y){
  24. if(S[x].size()<S[y].size())swap(S[x],S[y]);
  25. for(set<int>::iterator it=S[y].begin();it!=S[y].end();++it)S[x].insert(*it);
  26. }
  27. 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();}
  28. inline void solve(){for(ri i=1;i<=tot;++i)if(link[i])e[link[i]].push_back(i);dfs(1);}
  29. inline ll query(int id){
  30. int p=1,up=s[id].size();
  31. ll ret=0;
  32. for(ri i=0;i<up;++i){
  33. p=son[p][s[id][i]-'a'];
  34. while(val[p]<k)p=link[p];
  35. ret+=len[p];
  36. }
  37. return ret;
  38. }
  39. }sam;
  40. int main(){
  41. scanf("%d%d",&T,&k);
  42. if(k>T){for(ri i=1;i<=T;++i)cout<<"0 ";return 0;}
  43. for(ri i=1,n;i<=T;++i){
  44. cin>>s[i],n=s[i].size();
  45. for(ri j=0;j<n;++j)sam.expand(s[i][j]-'a',i);
  46. sam.last=1;
  47. }
  48. sam.solve();
  49. for(ri i=1;i<=T;++i)cout<<sam.query(i)<<' ';
  50. return 0;
  51. }

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. python处理数据问题详解

    连接数据库 这里需要调用pymysql包,(pip install PyMySQL) 注意pip安装时名字和程序里import的名字不一样 import pymysql # 打开数据库连接 db = ...

  2. unary

    unary - 必应词典   adj.[数]单元的 网络一元:一元的:一元码 例句Returns a value generated by rolling up the values of the c ...

  3. Instrumentation类——Android自动化测试学习历程

    这里需要把Instrumentation类的视频的上.中.下三集一起看,把内容总结一下... 视频地址: http://study.163.com/course/courseLearn.htm?cou ...

  4. [Java学习]面向对象-super关键字;final关键字

    super关键字 super代表的是当前子类对象中的父类型特征,可以看做是this的一部分.与this不同,不是引用,不存储对象内存地址. super可以用在什么位置 1 可以用在成员方法中.不能用在 ...

  5. iOS-引用计数与ARC(转)

    以下是关于内存管理的学习笔记:引用计数与ARC. iOS5以前自动引用计数(ARC)是在MacOS X 10.7与iOS 5中引入一项新技术,用于代替之前的手工引用计数MRC(Manual Refer ...

  6. QQ分享登陆报错

    linker command failed with exit code 1 (use -v to see invocation)报错原因 builtSetting下搜索 bitco 改为NO

  7. Kafka基本使用

    Kafka基本使用 官网地址  http://kafka.apache.org/   一切应以官网文档为准. 安装 download里下载要安装的版本.或者直接wget该网址.如wget http:/ ...

  8. C语言常用关键字及运算符操作

    1.关键字 (1)数据类型 char                          1字节,8bit==256 int long,short unsgined  ,signed      无符号为 ...

  9. Windows下adobe Reader中pdf字体helvetica被替换为ArialMT

    笔者最近java项目中用itext-2.1.7导出pdf,使用了Helvetica,这个字体是内置的字体,本地Adobe Reader版本9.0 导出的文字是img.nur.cn实际效果 查看了pdf ...

  10. storage封装

    storage.js /* storage 主要放项目中的storage相关操作:存取等 */ var storage = { /** 对本地数据进行操作的相关方法,如localStorage,ses ...