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.pswp.cn/news/450168.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450168.shtml
英文地址,請注明出處:http://en.pswp.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文件放置到工程下使用即可。