傳送門
如題,給定 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 ...