离谱,谁能给我看看为什么输出这个
查看原帖
离谱,谁能给我看看为什么输出这个
310801
Spouter_27楼主2022/8/13 02:56

评测记录,卡了很久了

//Code By Spouter_27
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=2e5+10;
ll t,n,f[4],d[4],root,cnt; 
signed main(){
	scanf("%lld",&t);
	while(t--){
		scanf("%lld",&n);
		for(int i=1;i<=3;i++)	scanf("%lld",&f[i]);
		d[1]=(f[1]+f[3]-f[2])/2;
		d[2]=(f[1]+f[2]-f[3])/2;
		d[3]=(f[2]+f[3]-f[1])/2;
		if(d[1]<0||d[2]<0||d[3]<0||(d[1]+d[2]+d[3])*2!=(f[1]+f[2]+f[3])||(d[1]+d[2]+d[3]+1)>n){
			printf("NO\n");
			continue;
		}
		printf("YES\n");
		for(int i=1;i<=4;i++){
			if(i==4){
				root=4,cnt=4;
				continue;
			}
			if(d[i]==0){
				root=i,cnt=3;
				break;
			}
		}
		for(ll i=1;i<=3;i++){
			if(i==root)	continue;
			if(d[i]==1){
				printf("%lld %lld\n",root,i);
				continue;
			}
			printf("%lld %lld\n",root,++cnt);
			for(int j=1;j<d[i]-1;j++){
				printf("%lld %lld\n",cnt,cnt+1);
				cnt++;
			}
			printf("%lld %lld\n",cnt,i);
		}
		for(ll j=cnt+1;j<=n;j++){
			printf("%lld %lld\n",root,j);
		}
	}
	return 0;
}
2022/8/13 02:56
加载中...