对于 @Froggy 的代码,可以通过造一组菊花的方式叉掉,gen 如下:
int n,m,x;
int main(){
freopen("data.in","w",stdout);
printf("%d %d %d\n",n=100000,m=100000,x=10000);
rep(i,1,n)printf("1 ");puts("");
rep(i,2,n)printf("1 %d\n",i);
rep(i,0,x)printf("1 ");puts("");
rep(i,1,m)printf("1 %d\n",n);
return 0;
}
对于 @command_block 的代码,他比 Froggy 代码强的地方在于他是基于排序后第 i 个询问和第 i−1 个询问之间的一些关系来跑的,所以只要把菊花换成类菊花即可 hack:
int n,m,x;
int main(){
freopen("data.in","w",stdout);
printf("%d %d %d\n",n=100000,m=100000,x=10000);
rep(i,1,n)printf("1 ");puts("");
rep(i,2,n){
if(i<=8)printf("1 %d\n",i);
else printf("%d %d\n",rng()%8+1,i);
}
rep(i,0,x)printf("1 ");puts("");
int cur1=1,cur2=1;
rep(i,1,m){
printf("%d %d\n",cur1,cur2);
cur2++;
if(cur2==n/4+1)cur1++,cur2=cur1;
}
return 0;
}
对于 @gxy001 的代码,可以用类似的方法 hack:
int n,m,x;
int main(){
freopen("data.in","w",stdout);
printf("%d %d %d\n",n=100000,m=100000,x=10000);
rep(i,1,n)printf("1 ");puts("");
rep(i,2,n)printf("%d %d\n",((i-1)%3)+1,i);
rep(i,0,x)printf("1 ");puts("");
rep(i,1,m)printf("3 3\n");
return 0;
}