cdoj 1092 韩爷的梦

http://acm.uestc.edu.cn/#/problem/show/1092

题意:略

思路:

做的第一道字符串hash的题,真是菜啊,还是看了几篇题解才会做的。字符串hash感觉就是函数的选取和改变模数和基数使得冲突消失,这题嘛,就是wa了就换一组模数和基数。

实际上也不是很懂。就是算出每一个字符串的hash值,然后将其保存,最后sort一下,统计其中不同元素的个数。

p = 1e6 + 7;
mod = 1e9 + 9;
这对组合就过了,但是数组没有下标越界也很迷啊。
代码:
 #include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std; int a[];
int mp[]; const int p = 1e6 + ;
const int mod = 1e9 + ; int myhash(char *s)
{
unsigned long long h = ; for (;*s;s++)
{
h = (h * p + mp[(int)(*s)]) % mod;
} return h;
} int main()
{ int cnt = ; for (int i = 'a';i <= 'z';i++)
{
mp[i] = cnt++;
} for (int i = '';i <= '';i++)
mp[i] = cnt++; for (int i = 'A';i <= 'Z';i++)
mp[i] = cnt++; for (int i = ;i < ;i++)
{
char s[]; scanf("%s",s); a[i] = myhash(s);
} sort(a,a+); int num = ,su = -; for (int i = ;i < ;i++)
{
if (su != a[i])
{
su = a[i];
num++;
}
} printf("%d\n",num); return ;
}
上一篇:MongoDB 菜鸟入门“秘籍”


下一篇:CF932 E. Team Work 结题报告