提供数据生成器&警示后人
查看原帖
提供数据生成器&警示后人
1175391
___1cm___楼主2025/8/30 15:32
#include<bits/stdc++.h>
#include<bits/extc++.h>
#define inf64 (long long)0x3f3f3f3f3f3f3f3f
#define inf32 (int)0x3f3f3f3f
#define _inf32 (int)0xc0c0c0c0
#define _inf64 (long long)0xc0c0c0c0c0c0c0c0
#define T 200
#define N 90000
#define Q 10
#define A 90000
using namespace std;
using namespace __gnu_pbds;
int t,n,sn,ssn,sssn,ssssn,q,a,sd;
int L[Q+10],R[Q+10],m[Q+10];
mt19937 rd(0);
int r(int l,int r){
	int len=r-l+1;
	return rd()%len+l;
}
bool in(int i,int j){
	return L[i]<=L[j] && R[j]<=R[i] || L[j]<=L[i] && R[i]<=R[j];
}
int main(){
    freopen("gen.out","w",stdout);
	sd=time(0);
	rd.seed(sd);
	// rd.seed(1756528520);
	t=T;
	printf("%d\n",t);
	while(t--){
		n=N,q=Q,a=A,sn=sqrt(n),ssn=sqrt(sn),sssn=sqrt(ssn),ssssn=sqrt(sssn);
		printf("%d %d %d\n",n,q,a);
		for(int i=1;i<=q;i++){
			m[i]=r(1,A);
			// while(1){
				L[i]=r(1,n);
				R[i]=r(L[i],min(L[i]+sn,n));
			// 	bool ok=1;
			// 	for(int j=1;j<i;j++){
			// 		if(in(i,j)){
			// 			ok=0;
			// 			break;
			// 		}
			// 	}
			// 	if(ok)break;
			// }
			printf("%d %d %d\n",L[i],R[i],m[i]);
		}
	}
	cout<<sd<<endl;
}

如果你与第一篇题解做法相同但95pts WA on #1,记得特判m[i]=1的情况

hack:

in:

1
90000 10 90000
15168 15400 18041
21736 21829 48224
31652 31679 79724
19516 19523 48224
2764 3024 12480
71157 71274 29192
41567 41692 60365
72849 72968 85074
61164 61296 72223
89496 89508 48022

out:

373578741

如果你各种奇怪WA,请一定仔细检查离散化前后变量的使用,防止填错。

离散化套离散化调了一周

2025/8/30 15:32
加载中...