洛谷 3370 字串雜湊初步

2021-08-25 08:30:11 字數 1274 閱讀 1543

analyse:

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

ac**:

///單雜湊

#includeusing namespace std;

const int maxn = 1e4 + 10;

typedef long long ll;

typedef unsigned long long ull;

ull harsh[maxn]; ///ull 是自動取模,對2^63

char ch[maxn];

ull gethash(char *s)

return h;

}int main()

sort(harsh,harsh + n);

int m = unique(harsh,harsh + n) - harsh;

printf("%d\n",m);

return 0;

}

還有的方法就是多乙個計算方式,讓兩個數值來代表同乙個 字串,這樣也就能更加減少 重複的可能。

#includeusing namespace std;

const int maxn = 1e4 + 10;

typedef long long ll;

typedef unsigned long long ull;

struct xxharsh[maxn];

char ch[maxn];

void gethash(char *s,int num)

harsh[num].a = h;

harsh[num].b = h1;

}bool cmp(xx a,xx b)

int main()

int ans = 0;

sort(harsh,harsh + n,cmp);

for(int i = 0;i < n;i ++)

if(harsh[i].a == harsh[i + 1].a && harsh[i].b == harsh[i + 1].b)

ans ++;

printf("%d\n",n - ans);

return 0;

}

洛谷 3370 字串雜湊初步

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

洛谷3370 字串雜湊(模板)

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

洛谷P3370 模板 字串雜湊

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