题目描述
如题,给定 N 个字符串(第 ii 个字符串长度为 Mi,字符串内包含数字、大小写字母,大小写敏感),请求出 N 个字符串中共有多少个不同的字符串。
友情提醒:如果真的想好好练习哈希的话,请自觉,否则请右转PJ试炼场:)
输入格式
第一行包含一个整数 N,为字符串的个数。
接下来 N 行每行包含一个字符串,为所提供的字符串。
输出格式
输出包含一行,包含一个整数,为不同的字符串个数。
输入输出样例
输入 #1
5
abc
aaaa
abc
abcc
12345
输出 #1
4
求大佬帮忙看看,为什么第一种和第二种输入对了,第三种错了,我看着这仨都一样呀!!!
第一种:
cin>>n;
cin>>s;
第二种:
scanf("%d",&n);
scanf("%s",&s);
第三种:
scanf("%d",&n);
getchar();
getline(cin,s);
AC代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
typedef unsigned long long ll;
int x=233317;
ll mod=212370440130137957ll;
ll hash(string s){
ll h=s[0];
for(int i=1;i<s.size();i++){
h=h*x+s[i];
h%=mod;
}
return h;
}
int main(){
int n;
cin>>n;
ll a[100005];
int k=0;
for(int i=0;i<n;i++){
string str;
cin>>str;
a[k++]=hash(str);
}
sort(a,a+n);
int ans=1;
ll sum=a[0];
for(int i=1;i<n;i++){
if(a[i]!=sum){
ans++;
sum=a[i];
}
}
printf("%d",ans);
}