Submission #1189899

#TimeUsernameProblemLanguageResultExecution timeMemory
1189899PieArmyPark (BOI16_park)C++20
31 / 100
35 ms2244 KiB
#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;

struct DSU{
	int n;
	vector<int>par,siz;
	void init(int N){
		n=N;
		siz.resize(n+1,0);
		par.resize(n+1);iota(par.begin(),par.end(),0);
	}
	int get(int x){
		if(x==par[x])return x;
		return par[x]=get(par[x]);
	}
	bool unite(int a,int b){
		a=get(a);b=get(b);
		if(a==b)return false;
		if(siz[a]<siz[b])swap(a,b);
		par[b]=a;
		siz[a]+=siz[b];
		return true;
	}
};

int n,m,w,h;
array<ll,3>arr[237];
vector<pair<ll,pair<int,int>>>ed;
vector<pair<ll,vector<int>>>v;
DSU dsu;

int main(){
	ios_base::sync_with_stdio(false);cin.tie(NULL);
	cin>>n>>m>>w>>h;
	n+=4;
	for(int i=5;i<=n;i++){
		for(int j=0;j<3;j++){
			cin>>arr[i][j];
		}
		ed.pb({arr[i][1]-arr[i][2],{1,i}});
		ed.pb({h-arr[i][1]-arr[i][2],{3,i}});
		ed.pb({arr[i][0]-arr[i][2],{4,i}});
		ed.pb({w-arr[i][0]-arr[i][2],{2,i}});
		for(int j=5;j<i;j++){
			ed.pb({ll(sqrt(((arr[i][0]-arr[j][0])*(arr[i][0]-arr[j][0]))+((arr[i][1]-arr[j][1])*(arr[i][1]-arr[j][1]))))-arr[i][2]-arr[j][2],{i,j}});
		}
	}
	sort(ed.begin(),ed.end());
	dsu.init(n);
	v.pb({0,{1,2,3,4}});
	for(auto x:ed){
		dsu.unite(x.sc.fr,x.sc.sc);
		if(v.size()==0||v.back().fr!=x.fr){
			v.pb({x.fr,vector<int>(4)});
		}
		for(int i=1;i<=4;i++){
			v.back().sc[i-1]=dsu.get(i);
		}
	}
	for(int i=1;i<=m;i++){
		int R,g;cin>>R>>g;
		int l=0,r=int(v.size())-1;
		while(l<r){
			int mi=(l+r+1)/2;
			if(v[mi].fr<R*2)l=mi;
			else r=mi-1;
		}
		vector<int>z=v[l].sc;
		for(int i=0;i<4;i++){
			z.pb(z[i]);
		}
		set<int>st;
		g--;
		st.insert(g+1);
		if(z[g+0]!=z[g+1]&&z[g+0]!=z[g+2]&&z[g+0]!=z[g+3]){
			st.insert(((g+1)%4)+1);
		}
		if(z[g+1]!=z[g+3]&&z[g+1]!=z[g+2]&&z[g+3]!=z[g+0]&&z[g+0]!=z[g+2]){
			st.insert(((g+2)%4)+1);
		}
		if(z[g+3]!=z[g+1]&&z[g+3]!=z[g+2]&&z[g+0]!=z[g+3]){
			st.insert(((g+3)%4)+1);
		}
		for(int x:st)cout<<x;
		cout<<endl;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...