洛谷P2698 [USACO12MAR]花盆Flowerpot

摘要:
给出N滴水滴的坐标,y表示水滴的高度,x表示水滴落在x轴上的位置。每一滴水以每秒1单位长度的速度下落。我们认为,只要水落在x轴上,并与花盆边缘对齐,就被认为是被捕获的。输出格式:一行中只有一个整数,代表最小花盆的宽度。花盆的宽度是2,这是必要的,也是足够的。将花盆放在x=4..6的位置,它可以接收1滴和3滴水滴,它们之间的时间差为10-3=7,符合条件。
P2698 [USACO12MAR]花盆Flowerpot

题目描述

Farmer John has been having trouble making his plants grow, and needs your help to water them properly. You are given the locations of N raindrops (1 <= N <= 100,000) in the 2D plane, where y represents vertical height of the drop, and x represents its location over a 1D number line:

洛谷P2698 [USACO12MAR]花盆Flowerpot第1张

Each drop falls downward (towards the x axis) at a rate of 1 unit per second. You would like to place Farmer John's flowerpot of width W somewhere along the x axis so that the difference in time between the first raindrop to hit the flowerpot and the last raindrop to hit the flowerpot is at least some amount D (so that the flowers in the pot receive plenty of water). A drop of water that lands just on the edge of the flowerpot counts as hitting the flowerpot.

Given the value of D and the locations of the N raindrops, please compute the minimum possible value of W.

老板需要你帮忙浇花。给出N滴水的坐标,y表示水滴的高度,x表示它下落到x轴的位置。

每滴水以每秒1个单位长度的速度下落。你需要把花盆放在x轴上的某个位置,使得从被花盆接着的第1滴水开始,到被花盆接着的最后1滴水结束,之间的时间差至少为D。

我们认为,只要水滴落到x轴上,与花盆的边沿对齐,就认为被接住。给出N滴水的坐标和D的大小,请算出最小的花盆的宽度W。

输入输出格式

输入格式:

第一行2个整数 N 和 D。

第2.. N+1行每行2个整数,表示水滴的坐标(x,y)。

输出格式:

仅一行1个整数,表示最小的花盆的宽度。如果无法构造出足够宽的花盆,使得在D单位的时间接住满足要求的水滴,则输出-1。

输入输出样例

输入样例#1: 
4 5
6 3
2 4
4 10
12 15
输出样例#1: 
2

说明

【样例解释】

有4滴水, (6,3), (2,4), (4,10), (12,15).水滴必须用至少5秒时间落入花盆。花盆的宽度为2是必须且足够的。把花盆放在x=4..6的位置,它可以接到1和3水滴, 之间的时间差为10-3 = 7满足条件。

【数据范围】

40%的数据:1 ≤ N ≤ 1000,1 ≤ D ≤ 2000;

100%的数据:1 ≤ N ≤ 100000,1 ≤ D ≤ 1000000,0≤x,y≤10^6。

sol:单调队列蛮显然的吧(其实接近板子题)

维护一个递增的单调队列,当队尾与队首的高度差>D时弹队首,当队尾比当前元素大时弹队尾

洛谷P2698 [USACO12MAR]花盆Flowerpot第2张洛谷P2698 [USACO12MAR]花盆Flowerpot第3张
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read()
{
    ll s=0;
    bool f=0;
    char ch=' ';
    while(!isdigit(ch))
    {
        f|=(ch=='-'); ch=getchar();
    }
    while(isdigit(ch))
    {
        s=(s<<3)+(s<<1)+(ch^48); ch=getchar();
    }
    return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
    if(x<0)
    {
        putchar('-'); x=-x;
    }
    if(x<10)
    {
        putchar(x+'0');    return;
    }
    write(x/10);
    putchar((x%10)+'0');
    return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('
')
const int N=100005,inf=0x3f3f3f3f;
int n,D;
struct Shuidi
{
    ll X,Y;
}Water[N];
inline bool cmp(Shuidi p,Shuidi q)
{
    return p.X<q.X;
}
struct Record
{
    ll Weiz,Shuz;
}Ddq[N];
int main()
{
    int i,j;
    R(n); R(D);
    for(i=1;i<=n;i++)
    {
        int x=read(),y=read();
        Water[i]=(Shuidi){x,y};
    }
    sort(Water+1,Water+n+1,cmp);
    int Head=1,Tail=0;
    ll ans=inf;
    for(i=1;i<=n;i++)
    {
        while(Head<Tail&&Water[Ddq[Head+1].Weiz].Y+D<=Water[Ddq[Tail].Weiz].Y) Head++;
        if(Water[Ddq[Head].Weiz].Y+D<=Water[Ddq[Tail].Weiz].Y) ans=min(ans,Ddq[Tail].Shuz-Ddq[Head].Shuz);
        while(Head<=Tail&&Water[Ddq[Tail].Weiz].Y>Water[i].Y) Tail--;
        Ddq[++Tail]=(Record){i,Water[i].X};
    }
    if(ans==inf) puts("-1");
    else Wl(ans);
    return 0;
}
/*
input
4 5
6 3
2 4
4 10
12 15
output
2
*/
View Code

免责声明:文章转载自《洛谷P2698 [USACO12MAR]花盆Flowerpot》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇css 控制文字超出时显示省略号[转]C#通过委托更新UI(异步加载)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

docsify制作在线说明文档的轻量级神器

我找到了一个使用html处理和加载md文件的网站。创建一个漂亮的在线描述文档(工件docsify)非常简单,nav可以删除--˃ENChinese加载window$docsify={el:'#main',//配置节点loadSidebar:true,//设置是否加载sidebarsubMaxLevel:2,//设置最大目录级别coverpage:true;/...

从零开始制作Galgame——我的Ren'py学习笔记(一)

然后点击“启动工程”点击“开始游戏”效果应该是这样的好了,现在你就制作出了属于自己的第一个游戏角色在一般的Galgame中,不是所有话都是“旁白”说的,一个完整的游戏里面应该有主角那么,怎么在ren'py中定义角色呢我们把刚才的代码更改一下definel=Characterlabelstart:l"HelloWorld!...

解决微信公众平台接口配置信息配置失败问题

填写完URL和TOKEN后,当您单击“提交”时,系统将始终提示您“配置失败”或其他错误,以确认URL所指向的后台页面代码是否正常。请确认TOKEN配置是否正常。此时,请检查INDEX页面的编码格式,并将其更改为GB2312进行尝试,这可能会解决您的问题。我想把这篇文章献给我浮躁的自己。...

Foxyproxy 火狐代理插件

Firefox上的插件Autoproxy一直很难使用。它永远不能更新规则,但foxyproxy可以替代它。用鼠标中键单击foxyproxy图标以在不同的代理方法之间切换。foxyproxy图标从foxhead变为蓝色,因为内容传输发生在网页中,该传输通过默认代理服务器,默认代理的初始颜色为蓝色。...

差分方程的零输入响应与零状态响应

差分方程的迭代分析方法有以下缺点:没有闭合解,不利于数学分析。某个时间的输出只能从头开始计算。本文介绍了差分方程的零输入响应和零状态响应分析方法。对于系统,这种分析方法可以很好地表达系统响应的物理意义=Y[-1]=0$Input Y[n]。回顾零输入响应和零状态响应的迭代计算,我们发现以下规则:$egin{align*}y[0]&=-&qqu...

libffi

Thisislibffi.info,由libffi.texi生产的bymakeinfo版本5.1。本手册适用于libffi,一个可移植的外国函数接口库。版权所有(C)200820102011redhat,股份有限公司。许可授予复制、分发...