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

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

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

只需要建出fail树,求子树就好了

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAXN = 1e6+50;
const int MOD = 1e9+7;
inline int read(){int x=0,f=1; char ch=getchar();while(!isdigit(ch)){ if(ch=='-') ch=-1; ch = getchar(); }while(isdigit(ch)) x=x*10+ch-48,ch=getchar();return x*f;
}
struct Trie{int nxt[MAXN][26],fail[MAXN],cnt[MAXN],id[MAXN];vector<int> g[MAXN];int sz;void Insert(char *s,int k){int root=0,len=strlen(s);for(int i=0;i<len;i++){if(!nxt[root][s[i]-'a']) nxt[root][s[i]-'a'] = ++sz;root = nxt[root][s[i]-'a'];cnt[root]++;}id[k] = root;}void Build(){queue<int> que;for(int i=0;i<26;i++) if(nxt[0][i]) que.push(nxt[0][i]);while(!que.empty()){int u = que.front(); que.pop();for(int i=0;i<26;i++){if(nxt[u][i]) {que.push(nxt[u][i]);fail[nxt[u][i]] = nxt[fail[u]][i];}else nxt[u][i] = nxt[fail[u]][i];}}}void dfs(int u){for(int i=0;i<(int)g[u].size();i++){int v = g[u][i];dfs(v);cnt[u] += cnt[v];}}void solve(int n){for(int i=1;i<=sz;i++) g[fail[i]].push_back(i);dfs(0);for(int i=1;i<=n;i++) printf("%d\n",cnt[id[i]]);}
}Automaton;
char str[MAXN];
int main(){int n = read();for(int i=1;i<=n;i++) scanf("%s",str),Automaton.Insert(str,i);Automaton.Build();Automaton.solve(n);return 0;
}

[TJOI2013] 单词相关推荐

  1. bzoj 3172: [Tjoi2013]单词 AC自动机

    3172: [Tjoi2013]单词 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

  2. fail树(bzoj 3172: [Tjoi2013]单词)

    3172: [Tjoi2013]单词 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 4223  Solved: 2051 [Submit][Stat ...

  3. 洛谷P3966 [TJOI2013]单词(后缀自动机)

    传送门 统计单词出现次数--为啥大家都是写AC自动机的嘞--明明后缀自动机也能做的说-- 统计出现次数这个就直接按长度排序然后做个dp就好,这是SAM的板子的要求啊,不提了 然后考虑怎么让所有串之间隔 ...

  4. BZOJ3172 [Tjoi2013]单词 字符串 SA ST表

    原文链接http://www.cnblogs.com/zhouzhendong/p/9026543.html 题目传送门 - BZOJ3172 题意 输入$n(n\leq 200)$个字符串,保证长度 ...

  5. BZOJ3172: [Tjoi2013]单词

    [传送门:BZOJ3172] 简要题意: 给出n个单词,你可以理解为将这些单词变成一个个段落,然后求出每个单词在所有段落中出现的次数 题解(一): 刚开始不是很懂题目,结果发现将所有单词看成一篇文章, ...

  6. BZOJ3172 TJOI2013 单词

    传送门 Description 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. Input 第一个一个整数N,表示有多少个单词, ...

  7. P3966 [TJOI2013]单词

    \(\color{#0066ff}{ 题目描述 }\) 小张最近在忙毕设,所以一直在读论文.一篇论文是由许多单词组成但小张发现一个单词会在论文中出现很多次,他想知道每个单词分别在论文中出现了多少次. ...

  8. 【BZOJ3172】[TJOI2013] 单词(AC自动机的小应用)

    点此看题面 大致题意: 给你NNN个单词,请你求出每一个单词在这NNN个单词中出现的次数. 相关题目 这道题应该是洛谷上一道板子题的升级版. LinkLinkLink [洛谷3796][模板]AC自动 ...

  9. bzoj3172:[Tjoi2013]单词

    传送门 看着就是裸的AC自动机是不是?会T一个点 然而...为什么放过暴力KMP和暴力find,理论复杂度\(O(nm)\)起步啊 AC自动机加一个树上差分就好啦,对于每个字符串的查询,实际上都是在f ...

最新文章

  1. 端口如何支持非localhost访问_Spring Boot 教程:CORS 支持
  2. vue中引入jquery
  3. [Overleaf] -带你初识Latex神器.快速上手.更新中...
  4. 5g虚拟技术旅游_5G赋能VR产业变革
  5. Bigo 实时计算平台建设实践
  6. 九.激光SLAM框架学习之LeGO-LOAM框架---速腾Robosense-16线雷达室外建图和其他框架对比、录包和保存数据
  7. read fread open fopen write fwrite
  8. 【论文】Awesome Relation Extraction Paper(关系抽取)(PART V)
  9. 【UE】Slate编辑器动态添加Button
  10. win10使用docker搭建jenkins,实现自动化部署
  11. Hibernate对象状态
  12. 购房攻略—买楼返折扣、返佣金、返京东购物卡、物业费套路
  13. 内推贴 || Marvell 2021校园招聘火热开启
  14. unity 灯光烘焙对比
  15. 线性表La和线性表Lb合并
  16. 炎炎夏日,小酱送你一个便携小空调
  17. 猜价格游戏购物街c语言,猜数游戏实例
  18. 自己用C++写一个发布者订阅者模式
  19. 无法附加到进程。Visual Studio 2015 远程调试器(MSVSMON.EXE)似乎没有在远程计算机上运行。
  20. 计算机科学发展主线,计算机科学跟技术学科的发展.ppt

热门文章

  1. 学校计算机室应该配备哪种灭火器,学校教学楼应配备哪种灭火器
  2. Yii2 Elasticsearch 操作Demo
  3. 删除EISA硬盘隐藏分区OEM隐藏分区
  4. 一键百度 一键翻译 云脉CC慧眼百度搜索版
  5. 从勾股定理到立方公式的整数解
  6. 东华大学计算机等级考试合格证书,内蒙古工业大学计算机等级考试合格证书
  7. #今日论文推荐# 2名全色盲儿童部分恢复视锥细胞功能,新研究首次证明基因治疗可激活休眠视锥细胞通路
  8. python 3 爬虫小白PyCharm爬取简单网页信息控制台错误
  9. 解决删除文件时出现“该项目不在XX中,请确认该项目的位置然后重试”的提示
  10. TOPCON/拓普康 SR-3AR分光辐射计