洛谷3370 字串雜湊(模板)

2022-05-12 11:36:33 字數 1174 閱讀 9164

題目描述

如題,給定n個字串(第i個字串長度為mi,字串內包含數字、大小寫字母,大小寫敏感),請求出n個字串中共有多少個不同的字串。

輸入輸出格式

輸入格式:

第一行包含乙個整數n,為字串的個數。

接下來n行每行包含乙個字串,為所提供的字串。

輸出格式:

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

輸入輸出樣例

輸入樣例#1: 複製

5 abc

aaaa

abc

abcc

12345

輸出樣例#1: 複製

4 說明

時空限制:1000ms,128m

資料規模:

對於30%的資料:n<=10,mi≈6,mmax<=15;

對於70%的資料:n<=1000,mi≈100,mmax<=150

對於100%的資料:n<=10000,mi≈1000,mmax<=1500

樣例說明:

樣例中第乙個字串(abc)和第三個字串(abc)是一樣的,所以所提供字串的集合為,故共計4個不同的字串。

hash,據說成完之後加乙個素數衝突率更低??
#include

#define ll long long

using

namespace

std;

const

int n = 10005;

const

int maxn = 1505;

const

int prime = 2333;

const

int base = 23;

const

int mod = 1e9+7;

char s[maxn];

int ans;

ll hash[n];

int n;

int main()

sort(hash+1,hash+1+n);

for(register

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

if(hash[i]!=hash[i-1]) ans++;

printf("%d",ans);

return

0;}

洛谷 3370 字串雜湊初步

analyse 我也是才學字串雜湊,大概理解是,對於乙個字串,你可以通過某種方式,來將整個字串轉化為乙個數值,然後就用這個數值來代表了這個字串。但是這種計算方式是有一定要求的,也就是說 在需要計算的字串很多的情況下,要不同的字串計算出來的這個數值盡可能的不同,這樣才能保證一一對應。都不知道自己在說什...

洛谷 3370 字串雜湊初步

題意 給定n個字串,求這n個字串中有多少個不同的。思路 肯定不能n 2比啊。我們可以把每個字串hash為乙個數字,然後判重即可。這裡用的是最常見的進製雜湊。includeusing namespace std typedef unsigned long long ull const int maxl...

洛谷P3370 模板 字串雜湊

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