CSPR02C. [CSP复赛模拟第02套-C题] 随机重复

提交2 通过1
通过率50%
时间限制1000ms
内存限制512MiB

题目描述

题目描述

小珅同学写了一个很菜的随机数生成器,输入了随机数种子 seedseed和个数 nn后,可以得到 nn个 0∼264−10 \sim 2^{64}-1之间的正整数。


#include <bits/stdc++.h>

using namespace std;

unsigned long long seed;

unsigned long long rnd()

{

seed = seed * seed + seed + 30ull;

return seed;

}

int main()

{

cin >> seed;

int n;

cin >> n;

for (int i = 1; i <= n; i++)

cout << rnd() << " ";

return 0;

}

比如输入 33 10可以得到下面的输出:


1152 1328286 1764345026112 6861985357762111070 1901262918123106560 7641831279628562718 7446905973427220672 5420652848451272926 7399983410558501248 17740564155584332190

小泽决定测试一下这个随机数生成器到底有多菜,于是指定了随机数种子 seedseed和随机数个数 nn,让小珅生成出来 nn个随机数。

紧接着给了他 mm个整数 a1∼ama_1 \sim a_m,让数数看看这 mm个整数中有多少个在那 nn个随机数中出现了。

输入格式

第一行为三个整数 seedseed, nn, mm。

第二行为空格隔开的 mm个整数 a1∼ama_1 \sim a_m。

输出格式

共一行,一个整数,表示在 nn个随机数中出现的 mm个数的个数。

输入 #1


33 10 5 33 1764345026112 1153 1152 17740564155584332190

输出 #1


3

输入 #2


33 10 20 1152 1328286 1764345026112 6861985357762111070 1901262918123106560 7641831279628562718 7446905973427220672 5420652848451272926 7399983410558501248 17740564155584332190 1152 1328286 1764345026112 6861985357762111070 1901262918123106560 7641831279628562718 7446905973427220672 5420652848451272926 7399983410558501248 17740564155584332190

输出 #2


20

输入 #3


33 5 2 1152 1328286

输出 #3


2

输入 #4


33 5 10 1152 1328286 1764345026112 6861985357762111070 1901262918123106560 7641831279628562718 7446905973427220672 5420652848451272926 7399983410558501248 17740564155584332190

输出 #4


5

129113 9999282 1
7705582381546079720
1
6879448 9999964 1
8584523574310869144
1
6601146 9999584 1
12823264874684791804
0

说明/提示

数据范围

对于 100%100\%的数据,1≤seed,n≤1071 \le seed, n \le 10^7,1≤m≤1051 \le m \le 10^5,0≤ai≤264−10 \le a_i \le 2^{64}-1。

子任务 11(1010分):保证小泽的 mm个随机数是使用小珅的程序,输入 seedseed和 mm生成出来的。

子任务 22(2020分):保证 m=1m = 1。

子任务 33(3030分):保证 n≤mn \le m。

子任务 44(4040分):没有特殊限制。