noip模拟题(拥挤的奶牛)

这是一个关于NOIP模拟题目的解决,主要涉及编程算法。程序使用C++编写,通过读取输入的奶牛位置和距离信息,运用优先队列进行排序和计算,判断奶牛是否在指定距离内相遇,最后输出相遇的奶牛对数。
摘要由CSDN通过智能技术生成
问题 B: 【NOIP模拟赛】拥挤的奶牛
时间限制: 1 Sec  内存限制: 128 MB
提交: 10  解决: 2
[提交] [状态] [讨论版] [命题人:xingxing]
题目描述
有N头奶牛(1<=N<=50000)排成一列。第i奶牛有一个坐标x[i]和一个身高h[i]。如果在奶牛i的左边距离d(1<=d<=1000000000,)以内有一头奶牛的身高不小于2*h[i],且右边距离d以内也有一头奶牛的身高不小于2*h[i],则奶牛i会觉得很拥挤。请找出有多少头这样的奶牛。 
输入
输入格式:第一行两个整数N和d。 
接下来N行,第i+1行包含整数x(i)和h(i)。所有奶牛的位置均不相等。 
输出
输出格式:有多少头奶牛会觉得拥挤。
样例输入 Copy
6 4
10 3
6 2
5 3
9 7
3 6
11 2
样例输出	Copy
2
拿到这道题的第一方法就是枚举,但是超时了,只拿了60分,我也从这道题了解到了单调队列,但我还是不清楚什么时候才用队列,怎样才能想到队列,看了一位博客的方法后,我也用优先队列写了一遍,实在是巧妙啊,请各位大神请教什么时候才用队列;

#include
#include
#include
#define smax 50001
using namespace std;
int n,d,le[smax],ri[smax],tot;
struct edge{
int x,h,xu;
}cow[smax];
bool com(edge a,edge b)
{
return a.x<b.x;
}
struct com1{
bool op

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值