Acwing 1285 单词

题意:
给出n个单词,文章由n个单词组成,求每个单词在文章中的出现次数

思路:

实现:

#include <stdio.h> #include <string.h> const int N = 1e6 + 5; int tr[N][26], idx = 1, nex[N], q[N], id[N], f[N]; char s[N]; void insert(int x) { int p = 0; int len = strlen(s + 1); for (int i = 1; i <= len; i++) { int t = s[i] - 'a'; if (!tr[p][t]) tr[p][t] = idx++; p = tr[p][t]; f[p]++; } id[x] = p; } void build() { int hh = 1, tt = 0; for (int i = 0; i < 26; i++) if (tr[0][i]) q[++tt] = tr[0][i]; while (hh <= tt) { int t = q[hh++]; for (int i = 0; i < 26; i++) { int &p = tr[t][i]; if (!p) p = tr[nex[t]][i]; else { nex[p] = tr[nex[t]][i]; q[++tt] = p; } } } } int main() { int n; scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%s", s + 1); insert(i); } build(); for (int i = idx - 1; i >= 1; i--) f[nex[q[i]]] += f[q[i]]; for (int i = 1; i <= n; i++) printf("%d\n", f[id[i]]); return 0; }

__EOF__

本文作者zxr
本文链接https://www.cnblogs.com/zxr000/p/16548442.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   zxr000  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示