P3370 【模板】字符串哈希

来源:互联网 发布:淘宝售后安装平台接单 编辑:程序博客网 时间:2024/06/10 04:21

题目描述

如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字、大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串。
友情提醒:如果真的想好好练习哈希的话,请自觉,否则请右转PJ试炼场:)
输入输出格式
输入格式:

第一行包含一个整数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)是一样的,所以所提供字符串的集合为{aaaa,abc,abcc,12345},故共计4个不同的字符串。

Tip: 感兴趣的话,你们可以先看一看以下三题:

BZOJ3097:http://www.lydsy.com/JudgeOnline/problem.php?id=3097

BZOJ3098:http://www.lydsy.com/JudgeOnline/problem.php?id=3098

BZOJ3099:http://www.lydsy.com/JudgeOnline/problem.php?id=3099

如果你仔细研究过了(或者至少仔细看过AC人数的话),我想你一定会明白字符串哈希的正确姿势的^_^

典型的字符串哈希

#include<iostream>#include<string>#include<cmath>                                            //一坨头文件using namespace std;int n,ans=0,cnt=0;string a,data[10007];int list[10001]={0};int next[10001]={0};int ok(string h){    int sum=0;    for(int i=0;i<h.size();i++)sum=sum*33+h[i];                   //将字符串转化为数字再来hash。。。    sum=abs(sum%10007);                                         //照常膜蛤。。。就是注意要abs,因为sum是int类型,字符串一长就会爆成负数,不过没事,不会让程序出错。。。只要不是负数就可以了。。。    int u=list[sum];    while(u)    {        if(data[u]==h)return 0;                          //判断前面是否有相同的字符串。。        u=next[u];    }    cnt++;    data[cnt]=h;    next[cnt]=list[sum];    list[sum]=cnt;                                              //如果sum所在的位置有东西,就要把它“吊”在下面。。。(就是类似链表的东西)    return 1;}int main(){    cin>>n;    for(int i=1;i<=n;i++)    {        cin>>a;        if(ok(a))ans++;                                   //如果没有重复就ans++    }    cout<<ans<<endl;                                   //输出    return 0;                                                 //回家}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 安卓8.0无法充值怎么办 刚下高速限行怎么办 西安限号外地车怎么办 深圳下高速限行怎么办 物业断业主的电怎么办 物业要求拆除外晾衣架怎么办 安置费一次给了房子没建好怎么办 虎牙充值不到账怎么办 平安保险交20年怎么办 u盘里东西乱码了怎么办 手机指环支架松了怎么办 运动完放屁很臭怎么办 腾讯柒个我要会员怎么办 海风吹的变黑了怎么办 冻豆角炖不烂糊怎么办 腿被热水烫了怎么办 肉和冰箱冻住了怎么办 解冻的肉臭了怎么办 临时用电电缆线破皮怎么办 阳台按自来水墙面脱落怎么办 墙被暖气熏黑了怎么办 下水管比地砖低怎么办 马桶下水管短了怎么办 下水管比马桶低怎么办? 寻常疣液氮冷冻后该怎么办 寻常疣冷冻后起水泡胀痛怎么办 冷冻后大水泡痒怎么办 19岁的宫颈糜烂怎么办 发面酸了没有碱怎么办 面发时间长酸了怎么办 丽珠兰打完红肿怎么办 美的冰柜冷藏室结冰怎么办 胃下午和晚上痛怎么办 二胡弓毛粗拉外弦触到里弦怎么办 电视成黑白的了怎么办 城市居民无钱入社保医保怎么办 老婆说离婚又找不到怎么办 爱一个人太累了怎么办 车凹陷漏底漆了怎么办 燕子窝掉下来了怎么办 文科没考上一本怎么办