WA#2求调(悬2关)
查看原帖
WA#2求调(悬2关)
614509
c21162wqb楼主2024/7/5 19:10
#include<bits/stdc++.h>
using namespace std;
int n,d,x[200010],y[200010];
vector<int>a[400010];
map<long long,int>mp;
bool solve() {
	mp.clear();
	for(int i=1;i<=n;i++) {
		mp[1ll*x[i]*1e5+y[i]]=i;
		a[x[i]+y[i]].push_back(i);
	}
	for(int i=1;i<=n;i++) {
		int x3=x[i]+d/2,y3=y[i]-d/2;
		if(x3<0||y3<0||mp[1ll*x3*1e5+y3]==0) continue ;
		int f=0,x1=x[i]+y[i]-d;
		if(x1<0||a[x1].size()==0) continue ;
		for(int j=0;j<a[x1].size();j++) {
			int v=a[x1][j];
			if(abs(x3-x[v])+abs(y3-y[v])==d) {
				printf("%d %d %d\n",v,i,mp[1ll*x3*1e5+y3]);
				for(int k=1;k<=n;k++) a[x[k]+y[k]].clear();
				return true;
			}
		}
	}
	for(int k=1;k<=n;k++) a[x[k]+y[k]].clear();
	return false;
}
signed main() {
	int t;
	cin>>t;
	while(t--) {
		scanf("%d%d",&n,&d);
		for(int i=1;i<=n;i++) {
			scanf("%d%d",&x[i],&y[i]);
			x[i]+=1e5,y[i]+=1e5;
		}
		if(solve()) continue ;
		for(int i=1;i<=n;i++) x[i]=-(x[i]-1e5)+1e5;
		if(solve()) continue ;
		for(int i=1;i<=n;i++) y[i]=-(y[i]-1e5)+1e5;
		if(solve()) continue ;
		for(int i=1;i<=n;i++) x[i]=-(x[i]-1e5)+1e5;
		if(!solve()) printf("0 0 0\n");
	}
	return 0;
}

2024/7/5 19:10
加载中...