P3370 【模板】字串雜湊

自為風月馬前卒發表於2017-05-05

題目描述

如題,給定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人數的話),我想你一定會明白字串雜湊的正確姿勢的^_^

map水過、、、、、、

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<map>
 4 #include<cstring>
 5 using namespace std;
 6 int ans=0;
 7 map<string,bool>mp;
 8 int main()
 9 {
10     int n;
11     scanf("%d",&n);
12     for(int i=1;i<=n;i++)
13     {
14         string a;
15         cin>>a;
16         if(mp[a]==1)
17         continue;
18         else
19         {
20             mp[a]=1;
21             ans++;
22         }
23     }
24     printf("%d",ans);
25     return 0;
26 }

 

相關文章