習題課4 3 雜湊桶 KMP

2021-10-25 09:11:18 字數 2418 閱讀 7524

什麼叫next陣列

構建next陣列

**解析

匹配過程

next陣列

複雜度分析

標程

static

class

task

if(b.

charat

(i)== b.

charat

(j+1))

// 記錄當前位的next陣列

// next陣列記錄的是當前位置匹配失敗後跳轉的位置

next[i]

= j;

} j =-1

; list

ans =

newarraylist

<

>()

;for

(int i =

0; i < n; i++

)// 為什麼要再判斷一次?

// 因為是退無可退,並且第一位匹配上

if(a.

charat

(i)== b.

charat

(j+1))

// 如果整個模式串匹配,則找到乙個答案

// i和m-1對應,和0對應的就是i-(m+1)

if(j == m-1)

}return ans;

}void

solve

(inputreader in, printwriter out)

}

標程
#include .h>

using namespace std;

typedef unsigned int u32;

// 以下**不需要解釋,你只需要知道這是用於生成資料的就行了

u32 nextint

(u32 x)

void

initdata

(u32* a,

int n,

int k, u32 seed)

}// 以上**不需要解釋,你只需要知道這是用於生成資料的就行了

const

int n =

67108864

;u32 a[n+1]

;u32 l[n+1]

,r[n+1]

;// 這是求解答案的函式,你需要對全域性變數中的 a 陣列求解 maxgap 問題

// n, k:意義與題目描述相符

// 返回值:即為答案(maxgap)

u32 maxgap

(int n,

int k)

// 統計答案

u32 last = a[0]

; u32 ans =0;

for(

int i =

0;i++i)

// 判斷桶是否非空

if(l[i]!=-

1)return ans;

}int

main()

標程
#include .h>

using namespace std;

typedef unsigned int u32;

// 以下**不需要解釋,你只需要知道這是用於生成資料的就行了

u32 nextint

(u32 x)

void

initdata

(u32* a,

int n,

int k, u32 seed)

}u32 hasharr

(u32* a,

int n)

return ret;

}// 以上**不需要解釋,你只需要知道這是用於生成資料的就行了

const

int n =

100000000

;u32 a[n +1]

;// 待排序陣列

u32 _a[n +1]

;// 輔助基數排序的臨時陣列

const

int m =16;

// 基數排序中的引數,表示每次排序的二進位制位數

const

int b =

1<< m;

// 2的m次冪,表示一次排序中的值域

const

int b = b -1;

// 這是乙個用於輔助計算的常值,它在二進位制下的最低m位均為1

// sum:在基數排序中記錄各值出現的次數

int sum[b +1]

;// 這是你的排序函式,你需要將全域性變數中的 a 陣列進行排序

// n, k:意義與題目描述相符

// 返回值:本函式需不要返回值(你只需要確保 a 被排序即可)

void

sorting

(int n,

int k)

intmain()

B 習題課一

計算導論與程式設計課程要開習題課,由於教室座位有限,所以決定限制參加人數。於是規定 1 最多允許一半的班級裡的同學參加 2 可以參加的班級最多允許一半的同學參加。現請你寫一段程式來計算習題課最多可能有多少個學生參加。輸入為兩行,第一行為乙個整數n 0題課的人數的最大值。當數字為奇數時,一半指的是該數...

B 習題課一

計算導論與程式設計課程要開習題課,由於教室座位有限,所以決定限制參加人數。於是規定 1 最多允許一半的班級裡的同學參加 2 可以參加的班級最多允許一半的同學參加。現請你寫一段程式來計算習題課最多可能有多少個學生參加。輸入為兩行,第一行為乙個整數n 0題課的人數的最大值。當數字為奇數時,一半指的是該數...

習題課3 1 動態規劃

01揹包 完全揹包public class beibaowenti1 3 1 static class task else return f v 實現結束 void solve inputreader in,printwriter out out.println getanswer n,v,t,w,...