1709. 哈希表判重

给定一个长为 n 的数组 a ,下标从 1 开始,值域为 [0,m] ,请你求出该数组的元素有多少个不同的取值。

为了避免输入过长,请使用下面的伪随机数生成器 C++ 代码生成数组 a

如果您使用其他编程语言,请你自行实现下面的伪随机数生成器 >_<

#include <bits/stdc++.h> using namespace std; int n, a[10000010], seed, m; signed main() { scanf("%d%d%d", &n, &m, &seed); mt19937 mt(seed); uniform_int_distribution<int> dist(0, m); for (int i = 1; i <= n; ++i) { a[i] = dist(mt); } // 下面是你解本题的代码 return 0; }

输入

输入一行三个整数 n,m,seed(1\le n\le10^7,0\le m\le10^9,1\le seed\le10^9)

输出

输出一行一个整数,代表答案

样例

标准输入 复制文本
10 10 580
标准输出 复制文本
6
标准输入 复制文本
15 5 1444
标准输出 复制文本
6
标准输入 复制文本
10000000 10000000 998244353
标准输出 复制文本
6321805

提示

样例 1 生成的 a8,0,4,1,1,4,8,8,5,9

样例 2 生成的 a1,0,4,4,2,5,3,1,0,4,1,4,1,1,0

为了方便大家测试各种不同的哈希函数和冲突处理策略,本题的时空限制很宽,但建议不要用 STL 乃至 sort 水过这道题 TwT

登录以提交代码。
单点时限 5 秒
内存限制 1024 MB
提交 87
通过 32