hack
查看原帖
hack
493937
Defy_HeavenS楼主2024/7/29 11:00

随便出一个 m≥2×105m\ge 2\times 10^5 的数据即可把第一篇和第三篇题解卡掉(数组开小也能过……)

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef double D;
const int N=1e5+5,Mod=100000;
int n=100000,m=200000; 
LL ran(){
	LL ans=2147483647;
	return ans*rand()%Mod+1;
}
LL a[N];
bool vis[N];
int main(){
	freopen("hack.in","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
    struct _timeb T;
    _ftime(&T);
    srand(T.millitm);
    cout<<n<<" "<<m<<"\n";
    int B=sqrt(n)-10;
    for(int i=1;i<=B;i++){
    	int val=ran();
    	if(i&1) val*=-1;
    	for(int j=1;j<=B;j++){
    		int id=ran(),cnt=0;
    		while(vis[id]){
    			id=ran();
    			cnt++;
    			if(cnt>=5000){
    				for(int k=1;k<=n;k++){
    					if(!vis[k]){
    						id=k;
    						break;
						}
					}
				}
			}
			a[id]=val;
			vis[id]=1;
		}
	}
	for(int i=1;i<=n;i++){
		if(!vis[i]) a[i]=ran();
	}
	for(int i=1;i<=n;i++){
		cout<<a[i]<<" ";
	}
	cout<<"1 100000\n";
	for(int i=1;i<m;i++){
		int x=ran(),y=ran();
		if(y<x) swap(x,y);
		cout<<x<<" "<<y<<"\n";
	}
	return 0;
}
/*
hack.out找其他题解(如第二遍)即可
*/

2024/7/29 11:00
加载中...