RT, 我这份代码AC了。期望得分是80分,结果数据太弱满分了。。。
#include<bits/stdc++.h>
using namespace std;
#define fr(i,a,b) for(ll i=a;i<=b;i++)
#define dr(i,a,b) for(ll i=b;i>=a;i--)
#define gc(c) c=getchar()
#define pc(c) putchar(c)
#define ll long long
inline ll read()
{
ll x=0;char c;bool flag=true;gc(c);
while(c>'9'||c<'0'){if(c=='-')flag=false;gc(c);}
while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),gc(c);
return flag? x: -x;
}
inline void pr(ll x)
{
if(x<0)x=-x,pc('-');
if(x>9)pr(x/10);
pc(x%10+48);
}
const int N=1e5+5;
struct point
{
int x,y;
}p[N];
int n;
namespace solve1
{
int b1[N],b2[N];
bool solve()
{
fr(i,1,n)b1[i]=0,b2[i]=0;
fr(i,1,n)b1[p[i].x]++,b2[p[i].y]++;
fr(i,1,n)b1[i]+=b1[i-1],b2[i]+=b2[i-1];
fr(i,1,n)
{
if(((b1[i]<<1) == n)||((b2[i]<<1) == n))
return true;
}
return false;
}
}
namespace solve2
{
int sum[55][55];
int summ(int xx1,int yy1,int xx2,int yy2)
{
return sum[xx2][yy2]+sum[xx1-1][yy1-1]-sum[xx1-1][yy2]-sum[xx2][yy1-1];
}
bool solve()
{
if(n>50)return true;//n大于50时不是2直接输出3
fr(i,1,n)fr(j,1,n)sum[i][j]=0;
fr(i,1,n)sum[p[i].x][p[i].y]++;
fr(i,1,n){
fr(j,1,n)
sum[i][j]+=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];//,pr(sum[i][j]),pc(' ');
// pc(10);
}
fr(i,1,n)
{
fr(j,1,n)
{
if(summ(i,1,n,j)==(n>>1) || summ(1,j,i,n)==(n>>1))return true;
}
}
return false;
}
}
inline void solve()
{
if(solve1::solve())puts("2");
else if(solve2::solve())puts("3");
else puts("4");
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
int T=read();
while(T--)
{
n=read();
fr(i,1,n)
p[i].x=read(),p[i].y=read();
solve();
}
return 0;
}