蒟蒻也能写出来的AC代码!这题是AC自动机模板题。插入单词时用一个没出现过的字符隔开就行了。

一些细节请看注释

#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
char a[1000005], b[1000205];//b数组要开这么大,因为要在所有单词拼起来之外再加n个#号
int n, len, mp[205], all, cnt[205];
queue<int> d;
struct ACzdj{
int siz, s[1000005][26], val[1000005], lst[1000005], fai[1000005];
int u, v;
void ins(int k){
u = 0;
len = strlen(a);
for(int i=0; i<len; i++)
b[all+i] = a[i];
all += len;
b[all++] = '#';
for(int i=0; i<len; i++){
v = a[i] - 'a';
if(!s[u][v]) s[u][v] = ++siz;
u = s[u][v];
}
if(!val[u]) val[u] = k;
mp[k] = val[u];//mp[k]记录的是与第k号单词相同的单词的最小编号,这样可以解决重复单词。
}
void getFail(){
for(int i=0; i<26; i++)
if(s[0][i])
d.push(s[0][i]);
while(!d.empty()){
u = d.front();
d.pop();
for(int i=0; i<26; i++){
v = s[u][i];
if(v){
fai[v] = s[fai[u]][i];
lst[v] = val[fai[v]]?fai[v]:lst[fai[v]];
d.push(v);
}
else s[u][i] = s[fai[u]][i];
}
}
}
void query(){
u = 0;
for(int i=0; i<all; i++){
if(b[i]=='#'){
u = 0;//记得置零
continue;
}
u = s[u][b[i]-'a'];
if(val[u]) cnt[val[u]]++;
v = lst[u];
while(v){
cnt[val[v]]++;
v = lst[v];
}
}
for(int i=1; i<=n; i++)
printf("%d\n", cnt[mp[i]]);
}
}ac;
int main(){
cin>>n;
for(int i=1; i<=n; i++)
scanf("%s", a), ac.ins(i);
ac.getFail();
ac.query();
return 0;
}

最新文章

  1. BZOJ4444 : [Scoi2015]国旗计划
  2. Js的引用关系示例和总结
  3. 解决win2003/2008下注册机或破解补丁程序无法运行问题
  4. 信息安全系统设计基础_exp3
  5. (转)innerHTML、innerText和outerHTML、outerText的区别
  6. phaser源码解析(三) Phaser.Utils类下isPlainObject方法
  7. uva 10014 Simple calculations
  8. BZOJ 2879 NOI2012美食节
  9. C#初步接触
  10. DataTable去除重复行
  11. jmeter之jtl文件解析
  12. EF Code First:实体映射
  13. Spring Boot 系列(二)单元测试&amp;网络请求
  14. OSI七层模型的每一层都有哪些协议
  15. 加壳软件-Virbox Protector Standalone
  16. Theorems for existence and uniqueness of variational problem
  17. Linux学习笔记:使用ftp命令上传和下载文件
  18. Tensorflow 相关概念
  19. PHP获取固定概率
  20. 作业一 031502140 博客地址yeze651521

热门文章

  1. css文字与文本相关样式
  2. Kendo MVVM 数据绑定(三) Click
  3. ABAP数据转换规则
  4. 巧用伪元素绘制带边的三角形--CSS3
  5. put_user
  6. Python3+Selenium3+webdriver学习笔记6(多窗口切换处理)
  7. MyEclipse Update Progress Error解决方法
  8. sklearn 学习之分类树
  9. JsonPath 语法 与 XPath 对比
  10. ubuntu k8s 命令补全