KMP經典入門題
試著寫寫題解,不知道以後會不會養成習慣。。。
前一陣子複習KMP,又回去找了幾道入門題寫寫。。。
切水找找1A的感覺orz。以下大致都是一句話+程式碼的形式。實在是懶。
不過我是複習,本來也沒什麼好說的。
hdu 1358 找迴圈節、求字串週期,簡單題,題面簡潔。
#include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> using namespace std; const int sz=1e6+5; char s[sz]; int fail[sz]; int main() { int cas=0; for(;;) { int n,len,i,p; scanf("%d",&n); if(n==0) break; scanf("%s",s+1); len=strlen(s+1); printf("Test case #%d\n",++cas); fail[0]=-1; fail[1]=0; for(i=2;i<=len;i++) { p=fail[i-1]; while(p>=0&&s[p+1]!=s[i]) p=fail[p]; if(p<0) fail[i]=0; else fail[i]=p+1; if(fail[i]&&i%(i-fail[i])==0) printf("%d %d\n",i,i/(i-fail[i])); } printf("\n"); } return 0; }
誒,還是順便說下吧,我的KMP是自己學的,不,應該說是自己理解之後按照自己的思路寫的。
然後寫成了現在這個樣子的完全就和很多資料不同了。。
當然主要差別無非就是,我的陣列下標從1開始而一般的從0開始,然後我寫的是“fail[]”陣列而不是“next[]”陣列。。。
我自己喜歡就好啦~
hdu 1686 匹配,求出現次數;與POJ3461是完全相同的題目。
#include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> using namespace std; const int sz=1e6+4; char s1[sz],s2[sz]; int fail[sz]; int main() { int cas; cin>>cas; while(cas--) { int len1,len2,i,p; scanf("%s%s",s1+1,s2+1); len1=strlen(s1+1); len2=strlen(s2+1); memset(fail,0,sizeof(fail)); fail[0]=-1; for(i=1;i<=len1;i++) { for(p=fail[i-1];p>=0&&s1[p+1]!=s1[i];p=fail[p]); if(p<0) fail[i]=0; else fail[i]=p+1; } int ans=0; for(i=1,p=0;i<=len2;i++) { for(;p>=0&&s1[p+1]!=s2[i];p=fail[p]); if(++p==len1){ans++; p=fail[p];} } printf("%d\n",ans); } return 0; }
這大概就是兩道經典入門題吧。。
第一次寫部落格,第一次發程式碼,先這樣。。。我看看效果。。
相關推薦
KMP經典入門題
試著寫寫題解,不知道以後會不會養成習慣。。。 前一陣子複習KMP,又回去找了幾道入門題寫寫。。。 切水找找1A的感覺orz。以下大致都是一句話+程式碼的形式。實在是懶。 不過我是複習,本來也沒什麼好說的。 hdu 1358 找迴圈節、求字串週期,簡單題,題面簡潔。 #i
KMP模板以及簡單的入門題總結
KMP模板 //kmp演算法的主要作用在於對next陣列的運用,所以這裡只給出next陣列的模板 //性質1:對於每一個長度len的子串,該子串的最小迴圈節為len-next[len] //性質2:kmp的next不斷向前遞迴的過程可以保證對於每一個當前字
poj1741+poj1987+poj2114——點分治入門題集合
剛才 是把 註意 幫我 legend 機房 ini ext one 最近看了看點分治,從poj上找到幾道題,都比較裸。而且感覺這三道題都長得差不多呀qwq ———————————————————————————————————————————————— 【poj 1741】
(莫隊算法)兩題莫隊算法統計數量的入門題
做了 ostream origin scan cmp opened ems view isp 因為這兩題差不多,而且比較簡單,就放一起,做了這題,這種題目就是巨水的題了。隨便寫都行。 CodeForces - 86D Powerful array 題意:
kafka經典入門
stat 緩存 大於 分區 依然 fig tin 發送消息 ray 問題導讀1.Kafka獨特設計在什麽地方?2.Kafka如何搭建及創建topic、發送消息、消費消息?3.如何書寫Kafka程序?4.數據傳輸的事務定義有哪三種?5.Kafka判斷一個節點是否活著有哪
[poj2104]可持久化線段樹入門題(主席樹)
unique tor oot 入門題 個數 索引 方便 return 出現的次數 解題關鍵:離線求區間第k小,主席樹的經典裸題; 對主席樹的理解:主席樹維護的是一段序列中某個數字出現的次數,所以需要預先離散化,最好使用vector的erase和unique函數,很方便;如
hdu3555 Bomb (數位dp入門題)
accep ota line -c them eight otto time test case Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others
博弈論入門題 kiki's game
unsigned str ram right scan logs sel include otto Problem Description Recently kiki has nothing to do. While she is bored, an idea appear
UVALive-4670 AC自動機入門題 求出現次數最多的子串
efi con sig http ati code fine mod long /** 鏈接:http://vjudge.net/problem/UVALive-4670 詳見lrj訓練指南P216 */ #include<bits/stdc++.h> usi
hdu3065 病毒侵襲持續中 AC自動機入門題 N(N <= 1000)個長度不大於50的模式串(保證所有的模式串都不相同), 一個長度不大於2000000的待匹配串,求模式串在待匹配串中的出現次數。
sizeof archive 模式 emp tomat .... truct print sca /** 題目:hdu3065 病毒侵襲持續中 鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=3065 題意:N(N <= 1
hdu 4468 spy 極其精彩的一道kmp靈活運用題
sum pen new 最短 agent 描述 數組 ... open 出的超級好的一道題。至於好在哪裏,請思考題目: 題意抽象出來為給定一個字符串r,找出它的一個最短後綴s,使得這個r可以被 s的某前綴+s的某前綴+......+s的某前綴+s本身構造出來。 具體題目描述
[經典好題]HDU4035 Maze 期望樹形DP
images 一道 隧道 oss 即使 ios bsp esp hdu 這是我當年要刷的一道,自己想死活想不出來,於是去網上頹題解,然後: 這特麽怎麽想都想不出來啊! 題意是這個樣子滴: 有n個房間,由n-1條隧道連通起來,實際上就形成了一棵樹 從結點1出發
HDU 1698 Just a Hook (線段樹區間更新入門題)
follow and iostream http span meta ali pos num Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O
經典入門_Hash的應用
需要 eof ++ 固定 給定 靜態 post 如果 pre Hash:將存儲位置與數據本身對應掐來的存儲手段就是Hash 例2.5 統計通成績學生人數(1018) 題目描述:讀入n(n<=1000)名學生的成績(0~100,整型)(當讀到n時結束),將獲得某一給定分
經典入門_貪心算法
lin clas .net 最優 3.3 opera 題目 turn spa 貪心是一種總是選擇“當前最好選擇”,而不從整體上去把握的思想,往往這種“貪心”的策略能得到接近最優的結果,甚至某些情況下就是最優解。 例2.11 FatMouse‘Trade(1433) 題目大意
loj6277 數列分塊入門題1
++ == gpo names body include its ios 裸題 裸題分塊。 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int a[100005],b[10005],n,
loj6278 數列分塊入門題2
lower block color sort ace pan 入門 else lock 題意:支持區間加,詢問區間中元素排名 維護兩個域。一個域維護原序列,一個域維護快內排序序列。 每次修改後更新快內排序序列。 修改時O(sqrt(n)log(sqrt(n))) 詢問時O(
POJ - 1469 COURSES (匈牙利算法入門題)
max pen AR == log ems hid display mes 題意: P門課程,N個學生。給出每門課程的選課學生,求是否可以給每門課程選出一個課代表。課代表必須是選了該課的學生且每個學生只能當一門課程的。 題解: 匈牙利算法的入門題。 #inclu
Tile Cut~網絡流入門題
cas 使用 text nds 現在 clas splay tle add Description When Frodo, Sam, Merry, and Pippin are at the Green Dragon Inn drinking ale, they like
poj~1236 Network of Schools 強連通入門題
str max 計算 () printf bsp 我們 jin ++ 一些學校連接到計算機網絡。這些學校之間已經達成了協議: 每所學校都有一份分發軟件的學校名單(“接收學校”)。 請註意,如果B在學校A的分發名單中,則A不一定出現在學校B的名單中您需要編寫一個計劃,計算必須