第一行包含一个正整数 $T$,表示测试数据的组数。
每组数据第一行包含 9 个正整数 $n,k,m,p,SA,SB,SC,A,B$,其中 $n$ 表示钻石种类数,$k,m$ 表示任务条件。
为了在某种程度上减少输入量,$a[]$ 和 $b[]$ 由以下代码生成:
unsigned int SA, SB, SC; int p, A, B;
unsigned int rng61(){
SA ^= SA << 16;
SA ^= SA >> 5;
SA ^= SA << 1;
unsigned int t = SA;
SA = SB;
SB = SC;
SC ^= t ^ SA;
return SC;
}
void gen(){
scanf("%d%d%d%d%u%u%u%d%d", &n, &k, &m, &p, &SA, &SB, &SC, &A, &B);
for(int i = 1; i <= p; i++)scanf("%d%d", &a[i], &b[i]);
for(int i = p + 1; i <= n; i++){
a[i] = rng61() % A + 1;
b[i] = rng61() % B + 1;
}
}
如对数据的生成方式仍有疑问,请参考下发文件中的参考程序。