hdu2920 字串雜湊

2021-06-18 15:06:54 字數 694 閱讀 1334

模式串中#,*把它分成一截截,當某一截在s串中多個位置能找到匹配,找第乙個匹配點,貪心

因為當中間有#,*,可以利用它跳過一些字元,

當遇到#,先跳過乙個字元,其他的一截截貪心去找到匹配位置,若最後剩餘偶數個字元,則match

第一截和最後一截如果是非#和*,必須嚴格匹配

找來的雜湊寫法

#include #include #include #include #include #include using namespace std;

#define ll long long

#define n 105000

struct obj

obj[n];

ll p[n],ha[n];

int tot;

void init(char *s)

if(i==tot-1)

while(cur<=len+1&&cur+obj[i].len<=len+1)

if(cur>len+1||cur+obj[i].len>len+1) return false;

cur+=obj[i].len;}}

--cur;

return cur<=len&&(len-cur)%2==0;

}char s[n];

int main ()

{ p[0]=1;

for(int i=1;i

HDU 1800 字串雜湊

從n個數中,最少能分出幾個單調遞增序列。水題。就是找到n個數中出現次數最多的次數。只是n個數範圍有30個十進位制位,需要當成字串處理,這就用到了字串雜湊。include using namespace std const int maxn 3005 const int mod 100007 stru...

16 字串雜湊 雜湊表

這個方法叫做字串字首雜湊法 先求出來每個字首的雜湊值 問題1 如何來定義某乙個字首的雜湊值 把這個字串看成是乙個p進製的數 每一位上的字母的ascii碼,就是這一位上的數 最後mod上乙個很小的數,就對映到0 q 1 這樣就可以把乙個字串轉換為乙個數字 注意事項1 一般情況下,不能把某個字母對映成0...

HDU4821 字串雜湊 尺取

給你乙個字串s,問你滿足下面兩個條件的子串有多少個?s長度不超過100000,1 leq m l leq s的長度。首先可以採用字串hash將字串處理便於儲存,字串hash我是在網上找的乙個方法,實際上是找乙個基數base,然後採用base進製,可以採用模乙個大質數,也可以是直接採用unsigned...