제출 #1189903

#제출 시각아이디문제언어결과실행 시간메모리
1189903PieArmyPark (BOI16_park)C++20
100 / 100
391 ms157840 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[2023]; 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...