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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值