洛谷 P3966 [TJOI2013]单词(AC自动机, fail 树)
创始人
2024-02-05 19:33:29
0

[TJOI2013]单词

题目描述

小张最近在忙毕设,所以一直在读论文。一篇论文是由许多单词组成但小张发现一个单词会在论文中出现很多次,他想知道每个单词分别在论文中出现了多少次。

输入格式

第一行一个整数 NNN,表示有 NNN 个单词。

接下来 NNN 行每行一个单词,每个单词都由小写字母 a−za-za−z 组成。

输出格式

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

样例 #1

样例输入 #1

3
a
aa
aaa

样例输出 #1

6
3
1

提示

数据规模与约定

  • 30%30\%30% 的数据, 单词总长度不超过 10310^3103。

  • 100%100\%100% 的数据,1≤n≤2001 \leq n \leq 2001≤n≤200,单词总长度不超过 10610^6106。

    1、题目和 P5357 【模板】AC 自动机(二次加强版) 一样,
    不同的是, 文本串有 n 个, 也就是查询 query n次。

#include 
using namespace std;
const int N = 210, M = 1e6 + 10;
int ch[M][26], ne[M], idx;
string s[N];
int n;int ans[M]; // ans[i]表示第i个字符串出现的次数
int mp[N];	// mp[x] 表示第x个字符串,对应的 AC自动机上的节点int tot;
int ver[M], head[M], Next[M];void add(int x, int y)
{ver[++tot] = y, Next[tot] = head[x], head[x] = tot;
}void dfs(int x)
{for(int i = head[x]; i; i = Next[i]){int y = ver[i];dfs(y);ans[x] += ans[y];}
}void insert(int k)
{int p = 0, len = s[k].size();for(int i = 0; i < len; ++i){int j = s[k][i] - 'a';if(!ch[p][j])ch[p][j] = ++idx;p = ch[p][j];}mp[k] = p;
}void build()
{queue q;for(int i = 0; i < 26; ++i){if(ch[0][i])q.push(ch[0][i]);}while(!q.empty()){int u = q.front(); q.pop();for(int i = 0; i < 26; ++i){int v = ch[u][i];if(v){ne[v] = ch[ne[u]][i], q.push(v);}else{ch[u][i] = ch[ne[u]][i];}}}for(int v = 1; v <= idx; ++v){add(ne[v], v);}
}void query(string s)
{int len = s.size();for(int k = 0, i = 0; k < len; ++k){i = ch[i][s[k] - 'a'];ans[i]++;}return;
}int main()
{scanf("%d", &n);for(int i = 1; i <= n; ++i){cin >> s[i];insert(i);}build();for(int i = 1; i <= n; ++i)query(s[i]);dfs(0);for(int i = 1; i <= n; ++i)printf("%d\n", ans[mp[i]]);return 0;
}

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...