只包含一组测试数据。
第一行包含一个整数 $k$,意义如题所述。
第二行包含一个整数 $seed$,这个数将用于生成一个 $k$ 元集合 $P$。
第三行包含一个整数 $S$,意义如题所述。
保证 $0 ≤ S ≤ k ≤ 10^7。1 ≤ seed ≤ 10000$。
一个用于生成输入数据的代码如下。其中读入部分已经完成,在数组p[]中,若p[i] = 0,表示 $i$ 不属于集合 $P$,否则,$i$ 属于集合$P$。
#include <stdio.h>
#include <string.h>
int p[20000005];
int seed, n, k, S;
int getrand() {
seed = ((seed * 12321) ^ 9999) % 32768;
return seed;
}
void generateData() {
scanf( "%d%d%d", &k, &seed, &S );
int t = 0;
n = k * 2 + 1;
memset(p, 0, sizeof(p));
for( int i = 1; i <= n; ++i ) {
p[i] = (getrand() / 128) % 2;
t += p[i];
}
int i = 1;
while( t > k ) {
while ( p[i] == 0 ) ++i;
p[i] = 0;
--t;
}
while( t < k ) {
while( p[i] == 1 ) ++i;
p[i] = 1;
++t;
}
}
int main() {
generateData();
return 0;
}

