题目地址:
https://www.luogu.com.cn/problem/P3370
题目描述:
如题,给定
N
N
N个字符串(第
i
i
i个字符串长度为
M
i
M_i
Mi,字符串内包含数字、大小写字母,大小写敏感),请求出
N
N
N个字符串中共有多少个不同的字符串。
输入格式:
第一行包含一个整数
N
N
N,为字符串的个数。接下来
N
N
N行每行包含一个字符串,为所提供的字符串。
输出格式:
输出包含一行,包含一个整数,为不同的字符串个数。
数据范围:
对于
30
%
30\%
30%的数据:
N
≤
10
N≤10
N≤10,
M
i
≈
6
M_i≈6
Mi≈6,
M
m
a
x
≤
15
Mmax≤15
Mmax≤15。对于
70
%
70\%
70%的数据:
N
≤
1000
N≤1000
N≤1000,
M
i
≈
100
M_i≈100
Mi≈100,
M
m
a
x
≤
150
Mmax≤150
Mmax≤150。对于
100
%
100\%
100%的数据:
N
≤
10000
N≤10000
N≤10000,
M
i
≈
1000
M_i≈1000
Mi≈1000,
M
m
a
x
≤
1500
Mmax≤1500
Mmax≤1500。
代码如下:
#include <iostream>
#include <unordered_set>
#include <string>
using namespace std;
const int N = 10010;
const long mod = 131;
int n;
long hs(string s) {
long h = 0;
for (int i = 0; i < s.size(); i++)
h = h * 10 + s[i];
return h;
}
int main() {
cin >> n;
unordered_set<long> s;
while (n--) {
string str;
cin >> str;
s.insert(hs(str));
}
cout << s.size() << endl;
return 0;
}
时间复杂度 O ( n l ) O(nl) O(nl), n n n是字符串个数, l l l是最大长度。