Magic Line
本題大意:給出n個點,求出一條線,使之将所有的點分成數量相同的兩部分,線不能通過點。
首先我先把所有的點按照先橫坐标後縱坐标(都是由小到大),然後由于題目給的範圍很大,我們可以想到,如果取一條最為豎的線,那麼一定能分開,然後考慮一下最中間的兩個點橫坐标相同的情況即可。
#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
#include <map>
#include <set>
#include <vector>
#include <map>
#include <bitset>
#include <algorithm>
#include <queue>
#include <stack>
#include <cmath>
#define ll long long
using namespace std;
#define maxn 1009
struct data
{
int x,y;
} a[maxn];
bool cmp(data a1,data a2)
{
if(a1.x==a2.x)return a1.y<a2.y;
return a1.x<a2.x;
}
int main()
{
int t;
while(scanf("%d",&t)!=-1)
{
int y1=-999000000;
int y2=999000000;
while(t--)
{
int n;
scanf("%d",&n);
for(int i=1; i<=n; i++)scanf("%d%d",&a[i].x,&a[i].y);
sort(a+1,a+1+n,cmp);
int ans=n/2;
if(a[ans].x==a[ans+1].x)//如果最中間的兩個點橫坐标相同,那就把線稍稍向向上平移一下
{
int x1=a[ans].x,x2=a[ans].x;
x1--;
x2++;
int y3=a[ans].y;
int y5=y3+999000001;
int y6=y3-999000000;
printf("%d %d %d %d\n",x1,y5,x2,y6);
}
else printf("%d %d %d %d\n",a[ans].x,y1,a[ans+1].x,y2);//不相同的話直接輸出
}
}
return 0;
}