Submission #1179881

#TimeUsernameProblemLanguageResultExecution timeMemory
1179881simona1230IOI Fever (JOI21_fever)C++20
25 / 100
5093 ms12612 KiB
#include <bits/stdc++.h> using namespace std; struct point { long long x,y; point(){} point(long long _x,long long _y) { x=_x; y=_y; } }; long long n; point p[200001]; void read() { cin>>n; for(long long i=1;i<=n;i++) cin>>p[i].x>>p[i].y; } vector<pair<long long,long long> > v[400001]; long long num(long long pt,long long d) { if(d==1&&p[pt].y>p[1].y)return -1; if(d==2&&p[pt].x>p[1].x)return -1; if(d==3&&p[pt].y<p[1].y)return -1; if(d==4&&p[pt].x<p[1].x)return -1; return (d-1)*n+pt; } void ae(long long x,long long y,long long z) { if(x==-1||y==-1)return; v[x].push_back({y,z}); v[y].push_back({x,z}); } void build() { for(long long i=1;i<=n;i++) { for(long long j=1;j<=n;j++) { if(i==j||p[i].x>p[j].x)continue; point a=p[i],b=p[j]; long long z=abs(a.x-b.x); if(b.x-a.x==b.y-a.y) { long long x=num(i,2),y=num(j,3); //cout<<i<<" "<<j<<" "<<x<<" "<<y<<endl; ae(x,y,z); x=num(i,1),y=num(j,4); //cout<<i<<" "<<j<<" "<<x<<" "<<y<<endl; ae(x,y,z); } if(b.x-a.x==a.y-b.y) { long long x=num(i,3),y=num(j,4); //cout<<i<<" "<<j<<" "<<x<<" "<<y<<endl; ae(x,y,z); x=num(i,2),y=num(j,1); //cout<<i<<" "<<j<<" "<<x<<" "<<y<<endl; ae(x,y,z); } } } } long long cnt=0,in[400001],used[400001]; long long f,ans; void bfs(long long s) { for(int i=1;i<=4*n;i++) used[i]=1e9+1; priority_queue<pair<long long,long long> > q; q.push({0,s}); used[s]=0; cnt=1; while(q.size()) { pair<long long,long long> t=q.top(); //cout<<t.second<<" "<<t.first<<endl; q.pop(); for(long long i=0;i<v[t.second].size();i++) { pair<long long,long long> nb=v[t.second][i]; if(used[nb.first]>nb.second&&nb.second>=t.first/*&&in[nb.first]*/) { if(used[nb.first]==1e9+1) { int vr=nb.first%n; if(vr==0)vr=n; used[vr]=used[vr+n]=used[vr+2*n]=used[vr+3*n]=0; cnt++; } used[nb.first]=nb.second; q.push({nb.second,nb.first}); } } } ans=max(ans,cnt); cnt=0; //cout<<cnt<<" !!"<<endl; } void rec(long long i) { if(i==n+1) { cnt=0; for(long long j=1;j<=4*n;j++) used[j]=1e9+1; bfs(f); ans=max(ans,cnt); return; } for(long long d=1;d<=4;d++) { if(num(i,d)==-1)continue; if(i==1)f=num(1,d); in[num(i,d)]=1; rec(i+1); in[num(i,d)]=0; } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); read(); if(p[1].x==0&&p[1].y==0) { ans=1; for(int i=2;i<=n;i++) if(p[i].x==p[i].y)ans++; cout<<ans<<endl; return 0; } build(); for(int d=1;d<=4;d++) bfs(num(1,d)); cout<<ans<<endl; return 0; } /* 3 0 0 3 3 -1 7 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...