Submission #772050

#TimeUsernameProblemLanguageResultExecution timeMemory
772050bgnbvnbvPark (BOI16_park)C++14
100 / 100
789 ms1860 KiB
#include<bits/stdc++.h> #define TASKNAME "codeforce" #define pb push_back #define pli pair<int,int> #define fi first #define se second #define fastio ios_base::sync_with_stdio(false); cin.tie(NULL); using namespace std; using ll=long long; const ll maxN=2e4; const ll inf=1e18; const ll mod=1e9+7; ll w,h; // y la doc // x la ngang ll mnx[maxN],mny[maxN],mxx[maxN],mxy[maxN]; bool check(ll i,ll j,ll id,ll bk) { i++,j++; if(i==1&&j==2) { if(mny[id]<=bk&&mxy[id]>=h-bk) return false; if((mny[id]<=bk&&mnx[id]<=bk)||(mny[id]<=bk&&mxx[id]>=w-bk)) return false; } else if(i==1&&j==3) { if((mny[id]<=bk&&mxy[id]>=h-bk)||(mnx[id]<=bk&&mxx[id]>=w-bk)) return false; if((mny[id]<=bk&&mnx[id]<=bk)||(mxx[id]>=w-bk&&mxy[id]>=h-bk)) return false; } else if(i==1&&j==4) { if(mnx[id]<=bk&&mxx[id]>=w-bk) return false; if((mny[id]<=bk&&mnx[id]<=bk)||(mnx[id]<=bk&&mxy[id]>=h-bk)) return false; } else if(i==2&&j==3) { if(mnx[id]<=bk&&mxx[id]>=w-bk) return false; if((mny[id]<=bk&&mxx[id]>=w-bk)||(mxx[id]>=w-bk&&mxy[id]>=h-bk)) return false; } else if(i==2&&j==4) { if((mny[id]<=bk&&mxy[id]>=h-bk)||(mnx[id]<=bk&&mxx[id]>=w-bk)) return false; if((mny[id]<=bk&&mxx[id]>=w-bk)||(mnx[id]<=bk&&mxy[id]>=h-bk)) return false; } else if(i==3&&j==4) { if(mny[id]<=bk&&mxy[id]>=h-bk) return false; if((mxx[id]>=w-bk&&mxy[id]>=h-bk)||(mnx[id]<=bk&&mxy[id]>=h-bk)) return false ; } return true; } ll n,m; ll x[maxN],y[maxN],r[maxN]; ll lim[5][5]; ll lab[maxN]; ll findset(ll x) { return lab[x]<0?x:lab[x]=findset(lab[x]); } void unite(ll u,ll v) { u=findset(u); v=findset(v); if(u==v) return; if(lab[u]>lab[v]) swap(u,v); lab[u]+=lab[v]; lab[v]=u; mnx[u]=min(mnx[u],mnx[v]); mny[u]=min(mny[u],mny[v]); mxx[u]=max(mxx[u],mxx[v]); mxy[u]=max(mxy[u],mxy[v]); } ll dis(ll i,ll j) { return (x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]); } bool chk(ll q,ll k,ll mid) { for(int i=1;i<=n;i++) { lab[i]=-1; mnx[i]=x[i]-r[i]-mid; mxx[i]=x[i]+r[i]+mid; mny[i]=y[i]-r[i]-mid; mxy[i]=y[i]+r[i]+mid; for(int j=1;j<i;j++) { if(dis(i,j)<(r[i]+r[j]+2*mid)*(r[i]+r[j]+2*mid)) unite(i,j); } } for(int i=1;i<=n;i++) { if(findset(i)==i) { if(check(q,k,i,mid)==false) return false; } } return true; } void solve() { cin >> n >> m; cin >> w >> h; for(int i=1;i<=n;i++) { cin >> x[i] >> y[i] >> r[i]; } for(int q=0;q<4;q++) { for(int k=q+1;k<4;k++) { ll low=0,high=min(w,h)/4; while(low<=high) { ll mid=low+high>>1; if(chk(q,k,mid)) low=mid+1; else high=mid-1; } lim[q][k]=high; } } for(int i=1;i<=m;i++) { ll id,ra; cin >> ra >> id; id--; for(int j=0;j<id;j++) { //cout << j<<' '<<lim[j][id]<<'\n'; if(lim[j][id]>=ra) cout << j+1; } cout << id+1; for(int j=id+1;j<4;j++) { //cout << j<<' '<<lim[id][j]<<'\n'; if(lim[id][j]>=ra) cout << j+1; } cout << '\n'; } //cout << lim[0][2]; } int main() { fastio //freopen(TASKNAME".INP","r",stdin); //freopen(TASKNAME".OUT","w",stdout); solve(); }

Compilation message (stderr)

park.cpp: In function 'void solve()':
park.cpp:117:27: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  117 |                 ll mid=low+high>>1;
      |                        ~~~^~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...