題目描述
如題,給定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 }