給定n個點,要求畫一條直線將n個點分紅均有n / 2個點的兩部分,不能有點在線上;c++
首先,先將全部的點進行以x爲第一關鍵字,y爲第二關鍵字進行排序,接着:ide
第一種狀況spa
對於第二種狀況,咱們首先根據a1(a[n / 2].x - 1,a[n / 2].y + INF)這點作出關於(a[n / 2].x,a[n / 2].y)的對稱點a2(a[n / 2].x + 1,a[n / 2].y - INF),因爲a[n / 2].x == a[n / 2 - 1].x ,而且a[n / 2].y > a[n / 2 - 1].y,那麼咱們能夠將(a[n / 2 - 1].x,a[n / 2 - 1].y - INF)看做是a2點向下移了一點(記爲a2'),那麼此時的a2'與a1這兩點肯定的直線一定符合題意;code
#include<bits/stdc++.h> #define x first #define y second using namespace std; typedef pair<int,int> pi; pi a[15555]; int n,T; const int E=900000000; int main(){ cin >> T; while (T--){ cin >> n; for (int i = 0; i < n; i++) cin >> a[i].x >> a[i].y; sort(a, a + n); if (a[n/2 - 1].x<a[n/2].x) printf("%d %d %d %d\n", a[n/2-1].x, a[n/2-1].y + E, a[n/2].x, a[n/2].y - E); else printf("%d %d %d %d\n", a[n/2].x - 1, a[n/2].y + E, a[n/2].x + 1, a[n/2-1].y - E); } }