제출 #1179507

#제출 시각아이디문제언어결과실행 시간메모리
1179507simona1230IOI 바이러스 (JOI21_fever)C++20
0 / 100
5093 ms589824 KiB
#include <bits/stdc++.h> using namespace std; struct point { int x,y; point(){} point(int _x,int _y) { x=_x; y=_y; } }; int n; point p[200001]; void read() { cin>>n; for(int i=1;i<=n;i++) cin>>p[i].x>>p[i].y; } vector<int> v[401]; int num(int pt,int d) { return (d-1)*n+pt; } void ae(int x,int y) { v[x].push_back(y); v[y].push_back(x); } void build() { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(i==j)continue; point a=p[i],b=p[j]; if(b.x-a.x==b.y-a.y) { int x=num(i,2),y=num(j,3); ae(x,y); x=num(i,1),y=num(j,4); ae(x,y); } if(b.x-a.x==a.y-b.y) { int x=num(i,3),y=num(j,4); ae(x,y); x=num(i,2),y=num(j,1); ae(x,y); } } } } int cnt=0,in[401],used[401]; void dfs(int i) { cnt++; for(int j=0;j<v[i].size();j++) { int nb=v[i][j]; if(in[nb]&&!used[nb])dfs(nb); } } int f,ans; void rec(int i) { if(i==n+1) { dfs(f); ans=max(ans,cnt); cnt=0; for(int j=1;j<=4*n;j++) used[j]=0; return; } for(int d=1;d<=4;d++) { 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(); build(); rec(1); cout<<ans<<endl; return 0; }
#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...