#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[401];
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[401],used[401];
void bfs(long long s)
{
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)cnt++;
used[nb.first]=nb.second;
q.push({nb.second,nb.first});
}
}
}
//cout<<cnt<<" !!"<<endl;
}
long long f,ans;
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();
rec(1);
cout<<ans<<endl;
return 0;
}
/*
3
0 0
3 3
-1 7
*/
# | 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... |