uva 11019 題目資料不合法!

2021-07-22 04:32:59 字數 1346 閱讀 9006

經過試驗,題目資料中,有各種不合法情況,只能使用scanf %s進行讀入。否則會出現各種問題。

即使用網上別人的標程,進行修改為gets一樣會掛。

還有網上一些同學的程式對拍後出現錯誤。。也ac了,資料太弱。

我的程式十分緩慢。。。現在正在研究原因。。(2300ms)

直接ac自動機強行跑每一行的串即可

#include#include #include #include #include#include#include#includeusing namespace std;

const int sigma_size = 26;

const int maxnode = 10010;

#define prln(x) cout<<#x<<" = "int g[maxnode];//i節點,能匹配到哪個串

int pipei[1100];

void init()

// 字元c的編號

int idx(char c)

// 插入字串。v必須非0

void insert(char s, int len, int id)

now = ch[now][c];

} val[now] =1;//這裡有單詞

pipei[id] = g[now];

g[now] = id;

} // 在t中找模板,text串的下標從0開始,長度為len

void find(char text, int len, int hang)

}} }

//計算fail指標

void get_fail()

}while (!q.empty())

q.push(will);

int pre = f[now]; //失配指標,先指now的失配,至少有一段都是相等的

while (pre && !ch[pre][c]) pre = f[pre];//往前跳失配指標,類似 kmp

f[will] = ch[pre][c]; // f[i]的意義就是g[?,i]和g[0,f[i]]的字串是相等的

last[will] = val[f[will]] ? f[will] : last[f[will]];

}} }

void doit()

}ac;

char text[1010][1010];

char pattern[1100][1100];

int main() {

int t;

scanf("%d", &t);

while (t--)

{ scanf("%d%d ", &n, &m);

for (int i = 0; i

UVA11019 矩陣匹配器

題意簡化,給你乙個大矩陣和乙個小矩陣,求小矩陣在大矩陣中出現了多少次,矩陣都不得旋轉 這個題就是字串匹配的二維版,然而不像資料結構,它的二維版並不複雜只是一行行拆開處理,但複雜度十分優越,幾乎等於讀入時間 vjudge上跑了0ms 首先將小矩陣的每一行分開看,這樣小矩陣就成了多個模板串,建個ac自動...

uva題目做題記錄

一般的思路都是不開陣列直接計算,即先設乙個最大值 max,每次迴圈時將每個數的步數和 max進行比較,如果 max小於該數,交換 2數,否則繼續迴圈,直至迴圈結束。此時花費時間較多,每次輸入都要重新計算。若能將每次迴圈的結果都儲存在陣列裡,則能節省大量時間,故先生成陣列。還有,每次輸入時,都會有許多...

題目筆記 UVA12096

一道綜合set,map,stack的stl題目,非常有意思!include include include include include include include using namespace std intn,m typedef set jihe 棧 sta 裡存的都是int,而int所...