给定一个长为 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 生成的 a 为 8,0,4,1,1,4,8,8,5,9
样例 2 生成的 a 为 1,0,4,4,2,5,3,1,0,4,1,4,1,1,0
为了方便大家测试各种不同的哈希函数和冲突处理策略,本题的时空限制很宽,但建议不要用 STL 乃至 sort 水过这道题 TwT