P3966 [TJOI2013]单词

\(\color{#0066ff}{ 题目描述 }\)

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

\(\color{#0066ff}{输入格式}\)

第一行一个整数N,表示有N个单词。接下来N行每行一个单词,每个单词都由小写字母(a-z)组成。(N≤200)

\(\color{#0066ff}{输出格式}\)

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

\(\color{#0066ff}{输入样例}\)

3
a
aa
aaa

\(\color{#0066ff}{输出样例}\)

6
3
1

\(\color{#0066ff}{数据范围与提示}\)

30%的数据, 单词总长度不超过\(10^3\)

100%的数据,单词总长度不超过\(10^6\)

\(\color{#0066ff}{ 题解 }\)

SAM,你是真的优秀啊

把所有串以一个无关字符间隔拼起来插入SAM

然后统计鸡排统计siz

在SAM上暴力匹配

\(O(n)\)

#include<bits/stdc++.h>
using namespace std;
#define LL long long
LL in() {char ch; int x = 0, f = 1;while(!isdigit(ch = getchar()))(ch == '-') && (f = -f);for(x = ch ^ 48; isdigit(ch = getchar()); x = (x << 1) + (x << 3) + (ch ^ 48));return x * f;
}
const int maxn = 2e6 + 255;
struct SAM {
protected:struct node {node *fa, *ch[27];int len, siz;node(int len = 0, int siz = 0): fa(NULL), len(len), siz(siz) {memset(ch, 0, sizeof ch);}};node *root, *tail, *lst;node pool[maxn], *id[maxn];int c[maxn];void extend(int c) {node *o = new(tail++) node(lst->len + 1, 1), *v = lst;for(; v && !v->ch[c]; v = v->fa) v->ch[c] = o;if(!v) o->fa = root;else if(v->len + 1 == v->ch[c]->len) o->fa = v->ch[c];else {node *n = new(tail++) node(v->len + 1), *d = v->ch[c];std::copy(d->ch, d->ch + 27, n->ch);n->fa = d->fa, d->fa = o->fa = n;for(; v && v->ch[c] == d; v = v->fa) v->ch[c] = n;}lst = o;}
public:void clr() {tail = pool;root = lst = new(tail++) node();}SAM() { clr(); }void ins(char *s) { for(char *p = s; *p; p++) extend(*p - 'a'); }void getsiz() {int maxlen = 0;for(node *o = pool; o != tail; o++) c[o->len]++, maxlen = std::max(maxlen, o->len);for(int i = 1; i <= maxlen; i++) c[i] += c[i - 1];for(node *o = pool; o != tail; o++) id[--c[o->len]] = o;for(int i = tail - pool - 1; i; i--) {node *o = id[i];if(o->fa) o->fa->siz += o->siz;}}int getans(char *s) {node *o = root;for(char *p = s; *p; p++) o = o->ch[*p - 'a'];return o->siz;}
}sam;
char s[201][1000011], t[1000011];
int main() {int n = in();char *q = t;for(int i = 1; i <= n; i++) {scanf("%s", s[i]);for(char *p = s[i]; *p; p++) *q++ = *p;*q++ = 'z' + 1;}sam.ins(t);sam.getsiz();for(int i = 1; i <= n; i++) printf("%d\n", sam.getans(s[i]));return 0;
}

转载于:https://www.cnblogs.com/olinr/p/10255052.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android应用开发—RecyclerView绘制蒙层

背景&#xff1a;如何在跨越两个或两个以上的item绘制一个view&#xff0c;该view需要跟随recyclerView的滑动而整体移动。 Overridepublic void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {super.onDrawOver(c, parent, state);final View child …

排序_3

希尔排序:分组排序 是把记录按下标的一定增量分组&#xff0c;对每组使用直接插入排序算法排序&#xff1b; 随着增量逐渐减少&#xff0c;每组包含的关键词越来越多&#xff0c;当增量减至1时&#xff0c;整个文件恰被分成一组&#xff0c;算法便终止。 def shell_sort(array)…

face++算法工程实习生面试

2018-01-11 算法工程实习生 自动化工具链方面 面试的知识点非常仔细&#xff0c;十分检验基本功底 1.自我介绍 2.算法题&#xff0c;leetcode 第一题 两数之和 问python中数组和字典的查找时间复杂度 3.git git 4.linux 常用命令 cd - ,cd ,cd ~,cd / awk 读取倒数第一行&a…

IDEA中怎么设置黑色或白色背景?

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 开启软件Intellij IDEA&#xff0c;在编辑框上面找到最前端的File。 点击File&#xff0c;找到Setting&#xff0c;点击进入。 然后在…

大公司体制内创新的困境

周末在家&#xff0c;随手翻看了一点吴军老师的《浪潮之巅》这本书。去年这本书上市之后我从头到尾阅读了一遍&#xff0c;在《浪潮之巅》中吴军老师历数了IT行业公司的兴衰发展史&#xff0c;提出了一个令人印象深刻的“基因决定论”&#xff0c;即由于公司基因的影响&#xf…

java打印调用堆栈的方式

Log.d(TAG,Log.getStackTraceString(new Throwable()));

weblogic jprofile配置

前提&#xff1a; 1.安装好weblogic 2.安装好jprofile 非等待模式&#xff1a; export JAVA_OPTIONS"${JAVA_OPTIONS} -Dweblogic.threadpool.MinPoolSize100 -Dweblogic.threadpool.MaxPoolSize1000 -Djava.awt.headlesstrue -agentpath:/opt/jprofiler9/bin/linux-x64/l…

springboot/git学习资源记录

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 只是记录一下觉得不错的资源&#xff1a; springboot: http://bbs.itmayiedu.com/article/1508826968799 http://blog.720ui.com/tags…

音视频引擎研究

音视频包&#xff1a;http://ishare.iask.sina.com.cn/f/33851582.html 1、WebRTC目的 WebRTC&#xff08;Web Real-Time Communication&#xff09;项目的最终目的主要是让Web开发者能够基于浏览器&#xff08;Chrome\FireFox\...&#xff09;轻易快捷开发出丰富的实时多媒体应…

我为什么“放弃”从事八年的嵌入式领域

由于嵌入式平台性能所限&#xff0c;以及相应的开发平台&#xff0c;工具&#xff0c;语言所限&#xff0c;导致很多前沿领域的软件工程理论&#xff0c;方法无法实施&#xff0c;有些跟不上时代的感觉。 ……

Linux命令替换字符串

:%s/str1/str2/ 用str2替换str1 转载于:https://www.cnblogs.com/haiyang21/p/10020503.html

人格差异

一.感知方式 感知是获取感受的方式 感觉型【S】 S首先通过五官来直接感知事物。注意点在于当前的事实环境&#xff0c;而不是事实的来源。比如&#xff1a;雪融化了 因为太阳出来了&#xff0c;是事实。雪融化了&#xff0c;因为雪吸收太阳的热量&#xff0c;达到自身融点&…

Hibernate @JoinTable 注解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 JoinTable支持的属性 属性是否必须说明name否指定该连接表的表名JoinColumns否该属性值可接受多个JoinColumn&#xff0c;用于配置连接表…

潭州课堂25班:Ph201805201 django 项目 第三十九课 后台 文章发布,图片上传到 FastDFS后端实现 七牛云讲解(课堂笔记)...

文章发布&#xff1a; # 1&#xff0c;从前台获取参数# 2&#xff0c;校验参数# 3&#xff0c;把数据保存到数据库# 4&#xff0c;返回执行结果到前台&#xff0c;&#xff08;创建成功或失败&#xff09;自定义 froms.py 校验参数 上传图片到七牛云 注册 https://www.qiniu.c…

原来公司需要这样的你

担任项目经理也有几年的时间了&#xff0c;项目组里来了不少的刚毕业或者工作时间不长的年轻人&#xff0c;有精明能干的&#xff0c;有中庸无为的也有自暴自弃混日子的&#xff0c;但再优秀的年轻人也会犯这样那样的错误&#xff0c;我总结起来一般就是以下这些问题&#xff0…

MySQL 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 前言&#xff1a; 关于多级别菜单栏或者权限系统中部门上下级的树形遍历&#xff0c;oracle中有connect by来实现&#xff0c;m…

git使用—rebase还是merge

转载自&#xff1a;https://segmentfault.com/q/1010000007704573/ 我猜现实中的情况是这样的&#xff1a; 使用 git 的人群中&#xff0c;不会用 rebase&#xff08;哪怕是基础功能的&#xff09;的至少一半&#xff08;这个估计恐怕很保守了&#xff09; 剩下一半里真正理解…

淘宝网轮播图

转载于:https://www.cnblogs.com/wxwxwx/p/10264370.html

atob和btoa的趣谈

2019独角兽企业重金招聘Python工程师标准>>> 不了解的人突然看到window对象的atob和btoa 函数&#xff0c;估计会认为哪个臭小子添加全局函数了。 你如果告诉他这是原生函数&#xff0c;他一定会怒骂&#xff1a;哪个脑残给api起个这样的名子。 你能猜出来这两个函数…

esp32使用lvgl,给图片取模显示图片

使用LVGL官方工具。 https://lvgl.io/tools/imageconverter 上传图片&#xff0c;如果想要透明效果&#xff0c;那么选择 输出格式C array&#xff0c;点击Convert进行转换。 下载.c文件放置到工程下使用即可。