原创 POJ1002《487-3279》方法:sort

題目大意:給定一些用字符,連接符,數字組成的號碼,將這些號碼按照規定格式,最終都轉換爲數字格式。輸出重複的號碼和次數。 解題思路:全存爲數字後,快排,若某個號碼出現多於2次則輸出。 // 620k 782ms #include <iost

原创 POJ1936《All in All》

直接暴力求是否是子串,就是在子串中加入一些字母。LCS的方法以後再想吧。 #include <iostream> #include <cstdio> #include <cstring> using namespace std; in

原创 POJ1007《DNA Sorting》方法:排序

題目大意:給定一組DNA序列,只包含A,C,G,T,按每個序列的逆序數排序。比如DCBA,逆序數爲3+2+1=6。 解決方法:求每一個DNA序列逆序數,從序列的後面向前遍歷,eg.如果遇到C,就加上之前A和B的數量,同時自身加一,然後根據

原创 POJ1804《Brainman》方法:歸併排序找逆序數

題目跟POJ2299差不多,只不過數據集變小了,用冒泡排序也可以。 // 204k 204ms #include <iostream> using namespace std; const int inf = 1000001; in

原创 POJ2299《Ultra-QuickSort》方法:歸併排序找逆序數

題目大意:求一個數的逆序數,比如54321的逆序數爲4+3+2+1+0=10,逆序數 = 在只交換相鄰兩數的前提下,需要的交換次數。 解題思路:因爲這題數據量爲50W,時間限制爲7000ms,用冒泡排序找相鄰交換次數肯定超時,因此用歸併排

原创 snort中的BM算法(c語言實現)

/* 函數:int* MakeSkip(char *, int) 目的:根據壞字符規則做預處理,建立一張壞字符表 參數: ptrn => 模式串P PLen => 模式串P長度 返回: int* -

原创 POJ2513《Colored Sticks》方法:字典樹+歐拉圖+並查集

轉自http://blog.csdn.net/lyy289065406/article/details/6647445 題目大意:給定25W條木棒,木棒兩個端點爲表示顏色的字符串,比如blue, red,能否根據端點顏色相同這個條件,將這

原创 POJ3432《Count Squares》方法:哈希

題目大意:跟POJ2002一摸一樣,就數據由1000變爲2000,找正方形形。 解題思路:已知: (x1,y1)  (x2,y2)  則:   x3=x1+(y1-y2)   y3= y1-(x1-x2)    x4=x2+(y1-

原创 POJ3274《Gold Balanced Lineup》方法:哈希

題目大意:最多有10w個牛,每個牛有最多30個特徵,比如特徵 10,可以表示爲二進制形式1010,現在要求出在一個連續區間,牛的每個特徵數目相等時,連續區間的最大長度。 解題思路:sum[i][j]表示從第1個到第i個牛,特徵j出現的總數

原创 POJ2002《Squares》方法:哈希

題目大意:給定平面上的一些座標點(1000個),找出這些點能構成多少個正方形,座標取值不大於20000。 解題思路:若遍歷4個點的座標,肯定超時。因此先取兩個點座標,然後用哈希值查找正方形的另兩個點座標,key = (x*x+y*y)%p

原创 BM算法

BM算法 後綴匹配,是指模式串的比較從右到左,模式串的移動也是從左到右的匹配過程,經典的BM算法其實是對後綴蠻力匹配算法的改進。所以還是先從最簡單的後綴蠻力匹配算法開始。下面直接給出僞代碼,注意這一行代碼:j++;BM算法所做的唯

原创 POJ2388《Who's in the Middle》方法:排序

題目大意:找10000個數中的中位數。 解題思路:用O(nlogn)的排序算法,O(n^2)會超時,STL中的sort函數是對qsort的優化,時間複雜度O(nlogn)。 //252k 47ms #include <iostream>

原创 POJ3349《Snowflake Snow Snowflakes》方法:哈希函數

題目大意:給定10W組數,每組數由6個數字組成,分別代表雪花的每一邊長,現在需要找出是否有兩個一樣的雪花,即順時針或逆時針的一組數要相同。 解題思路:因爲數據量過大,因此不能將每組數和其他10W組數比較,因此用到哈希函數,以每組數的和作爲

原创 BM模式匹配算法-原理(圖解) 比較清楚的一篇

  由於畢業設計(入侵檢測)的需要,這兩天仔細研究了BM模式匹配算法,稍有心得,特此記下。     首先,先簡單說明一下有關BM算法的一些基本概念。     BM算法是一種精確字符串匹配算法(區別於模糊匹配)。     BM

原创 POJ3461《Outplo》方法:KMP

題目大意:求p字符串在s字符串中出現的次數。 解題思路:典型的KMP,但是要注意這裏的nextval數組要多求一位,比如aka的nextval數組爲-1,0,-1,1,從而在akakaka中找aka子串時,在s[3]時,可以與p[2]比較