洛谷P3370 模板 字串雜湊

2021-10-24 17:36:24 字數 1096 閱讀 3373

傳送門

如題,給定 n

nn 個字串(第 i

ii 個字串長度為 m

im_i

mi​ ,字串內包含數字、大小寫字母,大小寫敏感),請求出 nn 個字串中共有多少個不同的字串。

輸入格式

第一行包含乙個整數 n

nn,為字串的個數。

接下來 n

nn 行每行包含乙個字串,為所提供的字串。

輸出格式

輸出包含一行,包含乙個整數,為不同的字串個數。

輸入輸出樣例

輸入

5

abcaaaa

abcabcc

12345

輸出

4
我們先來看這個雜湊常數p

pp最少是多少:26個小寫字母(『a』 ~ 『z』),26個大寫字母(『a』 ~ 『z』),10個數字(『0』~『9』),加起來一共有62個字元。

但是保險起見,最好設乙個稍微大一點的質數,比如137。

接下來我們把每乙個字串的雜湊值算出來,找有沒有重複的就行了。

#include

using

namespace std;

#define maxn 10005

const

int p =

137;

//初始化雜湊常數

char s[maxn]

;#define ll long long int

ll h[maxn]

;map m;

//這裡的map是用來判斷雜湊值是不是重複的,如果重複了

ll gethash

(char s)

intmain()

int ans =0;

for(

int i =

1; i <= n; i++)}

cout << ans << endl;

return0;

}

洛谷P3370 模板 字串雜湊

rt.雜湊,用於處理一些大值統計方面問題,它的下位是堆排?c,不存在下位的 當數值特別大的時候,堆的陣列就會炸掉。於是雜湊將這些特別大的數除上乙個質數,得到乙個位置存這個特別大的數。然後就正常用,每次就找到這個得出的位置 由於除的是質數,所以一般情況,不同的數得到的位置是不會衝突的。如果衝突了,那麼...

洛谷 P3370 模板 字串雜湊

如題,給定 n 個字串 第 i 個字串長度為 m i 字串內包含數字 大小寫字母,大小寫敏感 請求出 n 個字串中共有多少個不同的字串。第一行包含乙個整數 n 為字串的個數。接下來 n 行每行包含乙個字串,為所提供的字串。輸出包含一行,包含乙個整數,為不同的字串個數。輸入 15 abcaaaa ab...

洛谷 P3370 模板 字串雜湊 如題

如題,給定n個字串 第i個字串長度為mi,字串內包含數字 大小寫字母,大小寫敏感 請求出n個字串中共有多少個不同的字串。輸入格式 第一行包含乙個整數n,為字串的個數。接下來n行每行包含乙個字串,為所提供的字串。輸出格式 輸出包含一行,包含乙個整數,為不同的字串個數。輸入樣例 1 5 abcaaaa ...