hdu3336解題報告

2021-07-07 10:33:53 字數 554 閱讀 2898

題目大意:有乙個長度為n的字串,理所當然它有n個字首,問將這個n個字首都拿去匹配,會匹配出來多少個,總數模10007。

解題思路:最簡單的應該就是a自動機,多模板匹配,其實這個題的字首樹是一條直線。。。。還有一種,就是kmp演算法,不用完整的kmp演算法,在建立失配表的時候就要開始統計,因為建立失配表的時候本來就是自己匹配自己,因此,失配表匹配到乙個狀態就是找到乙個字首。當然最後必須加上n,字首本來就存在與這個字串。

ac**:

#include#include#include#includeusing namespace std;

const int maxn=200000+1000;

const int mod=10007;

int t,n;

char s[maxn];

int f[maxn];

int sum;

void getfail(char *p,int * f)

{ int m=strlen(p);

f[0]=0;

f[1]=0;

for(int i=1;i

3336記憶化搜尋解題報告

起初也不知道這個題目還有乙個更為簡單易想的辦法,那就是記憶化的搜尋。因為題目的基本意思就是要你匹配給你字串的所有長度的字首在字串當中所出現的次數,那麼這個時候我們可以設計乙個簡便的記憶方法。設定乙個place來記錄每次新的字首長度所匹配的位置資訊。例如 ababab這個字串 我們可以首先讓這個pla...

hdu3790解題報告

這裡起點和終點都是確定的,唯一有點小麻煩 也算不上什麼麻煩 就是這裡的權值有兩個,錢和路長,題目要求選擇最短路,對於一樣長度的路選擇錢最少的路.那麼我們每次就對路長鬆弛,對於路長一樣的在對錢鬆弛.不懂鬆弛操作的很抱歉 ac 840k 109ms include includeusing namesp...

hdu2647解題報告

題意 有個工廠的老闆給工人發獎金,每人基礎都是888,工人們有自己的想法,如 a 工人想要比 b 工人的獎金高,老闆想要使花的錢最少 那麼就可以 給b 888,給a 889 但是如果在此基礎上,b也想比a高,那麼就不能讓他們滿意,輸出 1 分析,根據題意可以得出乙個拓撲的關係,比如 一組資料 4 4...