#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[400001];
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[400001],used[400001];
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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |