L. Lifeguards(排序)

在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
題意:知道游泳者的座標,有兩個教練看管,並且兩位教練看管的游泳者最多隻有一個,一個游泳這隻能被一個教練看管(只有其中的一個游泳者能被兩個教練同時監管)。求兩位教練的座標;
這道題,我讀了讀,沒什麼思路,就沒有寫了,結果看了題解。。。。。我怎麼沒想到無窮遠呢???
如果n爲奇數,那麼只需要找到排序後的中間座標然後y±1就行了,這樣他們最多隻能同時管同一個游泳者。
如果n是偶數,那麼必須平分爲兩個簡練監管:
圖理解:
1.
在這裏插入圖片描述
2.
在這裏插入圖片描述
黑色是游泳者,所以這道題就可以AC了,注意INF不要超過取1e18,因爲題目有座標範圍規定;

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct Node{
	ll x,y;
}a[100050];
bool cmp(Node a,Node b){
	if(a.x==b.x)return a.y<b.y;
	else return a.x<b.x;
}
const ll INF=1e17;
int main(){
    ll n;
    scanf("%lld",&n);
    for(ll i=0;i<n;i++)scanf("%lld %lld",&a[i].x,&a[i].y);
     sort(a,a+n,cmp);
     ll mid=n/2;
     Node t=a[mid];//取中間的,如果是偶數,那麼取靠後面的,如果是奇數那麼取中間的
     if(n&1){
     	printf("%lld %lld\n%lld %lld\n",t.x-INF,t.y-1,t.x+INF,t.y+1);
	 }else{
	 	printf("%lld %lld\n%lld %lld\n",t.x-INF,t.y-1,t.x+INF,t.y);
	 }
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章