学习C++从娃娃抓起!记录下洛谷C++学习和备考过程中的题目,记录每一个瞬间。
附上汇总贴:洛谷刷题C++语言 | 汇总
【题目描述】
如题,给定 N 个字符串(第 i 个字符串长度为 M i M_i Mi,字符串内包含数字、大小写字母,大小写敏感),请求出 N 个字符串中共有多少个不同的字符串。
【输入】
第一行包含一个整数 N,为字符串的个数。
接下来 N 行每行包含一个字符串,为所提供的字符串。
【输出】
输出包含一行,包含一个整数,为不同的字符串个数。
【输入样例】
5
abc
aaaa
abc
abcc
12345
【输出样例】
4
【代码详解】
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
int n, ans;
string s;
ull a[10005];
ull myhash(string s)
{
ull code = 0, x = 131, y = 140814840257324663; // y为小于a/131-131的最大质数
for (int i=0; i<s.size(); i++)
code = (code*x + (ull)s[i]) % y;
return code;
}
int main()
{
cin >> n;
for (int i=1; i<=n; i++) {
cin >> s;
a[i] = myhash(s);
}
sort(a+1, a+n+1);
ans = unique(a+1, a+n+1)-(a+1);
cout << ans;
return 0;
}
【运行结果】
5
abc
aaaa
abc
abcc
12345
4