博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3172 TJOI2013 单词
阅读量:5953 次
发布时间:2019-06-19

本文共 1625 字,大约阅读时间需要 5 分钟。

Description

某人读论文,一篇论文是由许多单词组成。但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次。

Input

第一个一个整数N,表示有多少个单词,接下来N行每行一个单词。每个单词由小写字母组成,N<=200,单词长度不超过10^6

Output

输出N个整数,第i行的数字表示第i个单词在文章中出现了多少次。

Sample Input

3

a
aa
aaa

Sample Output

6

3
1

哎,这不是多字符串的问题吗?我们首先就想到了AC自动机!

fail指针的意义是什么呢?就是一个后缀链接,而后缀是覆盖了所有的子串的,所以我们可以用一次树DP,就统计出了每一个单词出现的次数。

/**************************************************************    Problem: 3172    User: geng4512    Language: C++    Result: Accepted    Time:256 ms    Memory:237132 kb****************************************************************/#include
#define MAXN 2000000#define MAXC 26int a[MAXN][MAXC], pre[MAXN], sz = 1, q[MAXN], cnt[MAXN], ed[MAXN], n;char s[MAXN];inline int Insert(char *s) { int c, p = 1; for(int i = 0; s[i]; ++ i) { c = s[i] - 'a'; if(!a[p][c]) a[p][c] = ++ sz; p = a[p][c]; ++ cnt[p]; } return p;}void Build() { int l = 1, r = 0; for(int i = 0; i < MAXC; ++ i) if(!a[1][i]) a[1][i] = 1; else { pre[a[1][i]] = 1; q[++ r] = a[1][i]; } while(l <= r) { int u = q[l ++]; for(int i = 0; i < MAXC; ++ i) if(!a[u][i]) a[u][i] = a[pre[u]][i]; else { pre[a[u][i]] = a[pre[u]][i]; q[++ r] = a[u][i]; } } for(int i = r; i; -- i) cnt[pre[q[i]]] += cnt[q[i]];}int main() { scanf("%d", &n); for(int i = 1; i <= n; ++ i) { scanf("%s", s); ed[i] = Insert(s); } Build(); for(int i = 1; i <= n; ++ i) printf("%d\n", cnt[ed[i]]); return 0;}

转载于:https://www.cnblogs.com/geng4512/p/5296869.html

你可能感兴趣的文章
雅虎因发送垃圾短信面临50万人集体诉讼
查看>>
linux curl 命令(转)
查看>>
Qt设计器中,使用QToolBar控件的技巧
查看>>
安裝linux後的內核調優
查看>>
ESXi 5.1 安装 Mac OSX Lion 10.7
查看>>
ASA防火墙 NAT新版老版的配置方法对比
查看>>
中国五大顶级域名9月第一周新增3.2万 美国净减7.6万个
查看>>
11月苹果移动设备份额TOP10:iPhone 6上榜居六
查看>>
6月第4周全球域名注册商(国际域名)新增注册量TOP22
查看>>
2016年1月中国域名商解析量14强:排名变动大
查看>>
IntelliJ IDEA 14 license key gen
查看>>
ogg启动报错libnnz11.so: cannot open shared object file
查看>>
如何实现“持续集成”?闲鱼把研发效率翻了个翻
查看>>
IT人的“钱”景以及收入的两道坎
查看>>
PHP 5.4.8 添加系统服务命令
查看>>
jdk与jre的区别
查看>>
什么是https,和ssl什么关系,为什么用https
查看>>
27. 访问者模式
查看>>
好程序员web分享图片标签、绝对路径和相对路径
查看>>
Postman 如何处理上一个接口返回值作为下一个接口入参?
查看>>