BZOJ4327:[JSOI2012]玄武密碼(SAM)

Description

在美麗的玄武湖畔,雞鳴寺邊,雞籠山前,有一塊富饒而秀美的土地,人們喚作進香河。相傳一日,一縷紫氣從天而至,只一瞬間便消失在了進香河中。老人們說,這是玄武神靈將天書藏匿在此。?
很多年后,人們終于在進香河地區發現了帶有玄武密碼的文字。更加神奇的是,這份帶有玄武密碼的文字,與玄武湖南岸臺城的結構有微妙的關聯。于是,漫長的破譯工作開始了。?
經過分析,我們可以用東南西北四個方向來描述臺城城磚的擺放,不妨用一個長度為N的序列來描述,序列中的元素分別是‘E’,‘S’,‘W’,‘N’,代表了東南西北四向,我們稱之為母串。而神秘的玄武密碼是由四象的圖案描述而成的M段文字。這里的四象,分別是東之青龍,西之白虎,南之朱雀,北之玄武,對東南西北四向相對應。?
現在,考古工作者遇到了一個難題。對于每一段文字,其前綴在母串上的最大匹配長度是多少呢??

Input

第一行有兩個整數,N和M,分別表示母串的長度和文字段的個數。?
第二行是一個長度為N的字符串,所有字符都滿足是E,S,W和N中的一個。?
之后M行,每行有一個字符串,描述了一段帶有玄武密碼的文字。依然滿足,所有字符都滿足是E,S,W和N中的一個。?

Output

輸出有M行,對應M段文字。?
每一行輸出一個數,表示這一段文字的前綴與母串的最大匹配串長度。?

Sample Input

7 3
SNNSSNS
NNSS
NNN
WSEE

Sample Output

4
2
0

HINT

對于100%的數據,N<=10^7,M<=10^5,每一段文字的長度<=100。

Solution

$SAM$板子……

Code

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #define N (20000007)
 5 using namespace std;
 6 
 7 int n,m,v[109];
 8 char s[N];
 9 
10 struct SAM
11 {
12     int p,q,np,nq,last,cnt;
13     int fa[N],son[N][4],step[N];
14     SAM() {last=cnt=1;}
15     
16     void Insert(int x)
17     {
18         p=last; np=last=++cnt; step[np]=step[p]+1;
19         while (p && !son[p][x]) son[p][x]=np, p=fa[p];
20         if (!p) fa[np]=1;
21         else
22         {
23             q=son[p][x];
24             if (step[q]==step[p]+1) fa[np]=q;
25             else
26             {
27                 nq=++cnt; step[nq]=step[p]+1;
28                 memcpy(son[nq],son[q],sizeof(son[q]));
29                 fa[nq]=fa[q]; fa[q]=fa[np]=nq;
30                 while (son[p][x]==q) son[p][x]=nq, p=fa[p];
31             }
32         }
33     }
34     int Query(char s[])
35     {
36         int len=strlen(s),ans=0,x=1;
37         for (int i=0; i<len; ++i)
38         {
39             if (!son[x][v[s[i]]]) return ans;
40             ++ans; x=son[x][v[s[i]]];
41         }
42         return ans;
43     }
44 }SAM;
45 
46 int main()
47 {
48     v['E']=0; v['S']=1; v['W']=2; v['N']=3;
49     scanf("%d%d%s",&n,&m,s);
50     for (int i=0; i<n; ++i) SAM.Insert(v[s[i]]);
51     for (int i=1; i<=m; ++i) scanf("%s",s), printf("%d\n",SAM.Query(s));
52 }

轉載于:https://www.cnblogs.com/refun/p/10520725.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279933.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279933.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279933.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ChatGPT 之后,再玩玩 Stable-Diffusion

前些天體驗的 ChatGPT 主要用來進行文本方面的處理&#xff0c;那么圖片生成有沒有這樣的 AI 工具 呢&#xff1f;答案是肯定的。例如&#xff1a;和菜頭公眾號的題圖和文章中的插圖大多都是使用 Stable-Diffusion 的 AI 圖形生成工具創作的。順著 Stable-Diffusion 搜索了下相…

滲透測試入門DVWA 教程1:環境搭建

首先歡迎新萌入坑。哈哈。你可能抱著好奇心或者疑問。DVWA 是個啥&#xff1f; DVWA是一款滲透測試的演練系統&#xff0c;在圈子里是很出名的。如果你需要入門&#xff0c;并且找不到合適的靶機&#xff0c;那我就推薦你用DVWA。 我們通常將演練系統稱為靶機&#xff0c;下面請…

指派問題(匈牙利算法)

問題描述&#xff1a; 在生活中經常遇到這樣的問題&#xff0c;某單位需完成n項任務&#xff0c;恰好有n個人可承擔這些任務。由于每人的專長不同&#xff0c;各人完成任務不同(或所費時間)&#xff0c;效率也不同。于是產生應指派哪個人去完成哪項任務&#xff0c;使完成n項任…

移動硬盤改臺式機硬盤_如何在臺式機或移動設備上離線使用Google云端硬盤

移動硬盤改臺式機硬盤If there’s any drawback to using cloud-based services for all your productivity and organization needs, it’s that if you can’t get an Internet connection, you’re basically out of luck. 如果使用基于云的服務來滿足您的所有生產力和組織需…

你可能不知道的容器鏡像安全實踐

大家好&#xff0c;我是Edison。最近在公司搭建CI流水線&#xff0c;涉及到容器鏡像安全的話題&#xff0c;形成了一個筆記&#xff0c;分享與你&#xff0c;也希望我們都能夠提高對安全的重視。時代背景近年來應用程序逐步廣泛運行在容器內&#xff0c;容器的采用率也是逐年上…

從零基礎到拿到網易Java實習offer,談談我的學習經驗

微信公眾號【程序員江湖】作者黃小斜&#xff0c;斜杠青年&#xff0c;某985碩士&#xff0c;阿里研發工程師&#xff0c;于2018 年秋招拿到 BAT 頭條、網易、滴滴等 8 個大廠 offer個人擅長領域 &#xff1a;自學編程、技術校園招聘、軟件工程考研&#xff08;關注公眾號后回復…

【Win 10 應用開發】UI Composition 札記(二):基本構件

在上一篇中&#xff0c;老周用一個示例&#xff0c;演示了框架視圖的創建過程&#xff0c;在本篇中&#xff0c;老周將給大伙伴們說一下 Composition 構建 UI 的一些“零件”。 UI Composition 有一個核心類——對&#xff0c;就是 Compositor 類&#xff0c;它是總生產車間&am…

禁用內置鍵盤_如何禁用Windows 10的所有內置廣告

禁用內置鍵盤Windows 10 has a lot of built-in advertising. This isn’t just about the free upgrade offer: Even if you purchase a new PC that comes with a Windows 10 license or spend $200 for a copy of Windows 10 Professional, you’ll see ads in your operati…

zbb20180710 maven Failed to read artifact descriptor--maven

Failed to read artifact descriptor--maven2016年09月10日 13:30:46閱讀數&#xff1a;13036在開發的過程中,作為新手,經常遇到Maven下載依賴的時候,"Failed to read artifact descriptor for xxx:jar"的錯誤對于這種非業務相關的問題,耽誤時間非常不效率,看到網站很…

震驚!頂著 39.5℃高燒 ,我和這哥倆都聊了些啥?

這是頭哥侃碼的第271篇原創上周三&#xff0c;我邀請了兩位嘉賓進入直播間&#xff0c;即便自己頂著 39.5 度的高燒&#xff0c;還是強打精神與這哥倆聊了倆小時。相信關注我的朋友們都知道&#xff0c;我是頭哥侃碼的主理人&#xff0c;同時也是上海TGO上海分會董事會成員。趙…

CAS原理分析及ABA問題詳解

什么是CAS CAS即Compare And Swap的縮寫&#xff0c;翻譯成中文就是比較并交換&#xff0c;其作用是讓CPU比較內存中某個值是否和預期的值相同&#xff0c;如果相同則將這個值更新為新值&#xff0c;不相同則不做更新&#xff0c;也就是CAS是原子性的操作(讀和寫兩者同時具有原…

在Windows Mobile模擬器(Emulator)建立網絡連接

因為想使用Windows Mobile Emulator進行網絡通信程序的測試&#xff0c;所以找方法配置Emulator的網絡連接。在網上找了一些文章&#xff0c;很多都說需要安裝Virtual PC 2007. 例如下面的文章Enable Network Connection Windows Mobile 6 Emulator 如果需要 Virtual PC 2007 可…

api游戲編程鼠標選擇拖動_如何選擇合適的游戲鼠標

api游戲編程鼠標選擇拖動You don’t need a gaming mouse to play PC games—just about any mouse with two buttons and a wheel will play anything you want it to. But that’s no reason to deny yourself the wonderful variety of gaming mouse designs on the market.…

iOS - 上架的APP 生成二維碼下載

1.首先打開蘋果App Store商店進入到里面&#xff0c;找到需要打開鏈接地址的應用程序&#xff0c;例如&#xff1a;百度。2. 在App Store商店里面先點擊一下應用程序圖標&#xff0c;再按一下…分享按鈕。 3. 接著選擇分享APP&#xff0c;再點擊拷貝鏈接地址&#xff0c;將應用…

Rsa2加密報錯java.security.spec.InvalidKeySpecException的解決辦法

最近在和支付寶支付做個對接&#xff0c;Java項目中用到了RSA2進行加解密&#xff0c;在加密過程中遇到了錯誤&#xff1a; java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : algid parse error, not a sequence 代碼執行到這句…

淺析領域驅動設計

1.概要DDD&#xff08;Domain-driven design&#xff0c;模型驅動設計&#xff09;是一種軟件設計的指導思想&#xff0c;而非固定的一套公式化開發模板&#xff08;這樣就會導致網絡上出現各種基于自己或業務上的理解而產出的DDD落地的實現&#xff0c;會讓很想學習的開發者迷…

Delphi實現的透明陰影以及蒙版效果菜單

QQ2010的皮膚控件目前實現了一部分&#xff0c;看到有些軟件的菜單&#xff0c;都有陰影&#xff0c;透明等效果&#xff0c;于是開始重新實現菜單控件&#xff0c;QQ2009版的菜單控件&#xff0c;是自己從TComponent繼承了完全模擬實現的一個菜單&#xff0c;雖然實現了菜單控…

cortana搜索框_如何在Windows 10任務欄上隱藏Cortana搜索框

cortana搜索框One of the most talked about features in the latest version of Windows 10 was the Cortana personal assistant that is integrated directly into the taskbar. But what if you don’t want to waste all that taskbar space? 最新版本的Windows 10中最受…

Kotlin 基礎 - 數據類型

一、Boolean 類型 Boolean 值有兩個值&#xff0c;分別為 true 或 false。多數情況下&#xff0c;Kotlin 中的 Boolean 相當于 Java 中的基本類型 boolean&#xff0c;只有在必要的情況下才會裝箱成為 Java 中的裝箱類型 Boolean。這一切都是交由編譯器來完成&#xff0c;我們無…

全框眼鏡拆卸鏡片方法分享

全框眼鏡拆卸鏡片方法分享http://www.iqiyi.com/w_19ru97p1n9.html 很多直接用手掰就成&#xff08;眼鏡布&#xff09; 轉載于:https://www.cnblogs.com/OceanF/p/9288411.html