USACO Milking Cows

摘要:
关键是如何模拟这个问题。如果你想到标记数组,你就是兄弟。所以我考虑了结构排序。如果您认为多个线段相互覆盖,那么让我们这样考虑。首先,我们将每个区间的左端点从大到小排序,然后开始遍历所有区间。如果此间隔的右端点大于当前间隔,我们将更新它,依此类推。因此,我们可以处理ans1和ans2并最终输出它们。最好理解代码。
洛谷 P1204 [USACO1.2]挤牛奶Milking Cows

洛谷传送门

JDOJ 1656: Milking Cows

JDOJ传送门

Description

三个农民每天清晨5 点起床,然后去牛棚给3 头牛挤奶.第一个农民在300 时刻(从5 点开始计时,秒为单位)给他的牛挤奶,一直到1000 时刻.第二个农民在700 时刻开始,在 1200 时刻结束.第三个农民在1500 时刻开始2100 时刻结束.期间最长的至少有一个农民在挤奶的连续时间为900 秒(从300 时刻到1200 时刻),而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为300 秒(从1200 时刻到1500 时刻).

你的任务是编一个程序,读入一个有N 个农民(1 <= N <= 5000)挤N 头牛的工作时间列表,计算以下

两点(均以秒为单位):

• 最长至少有一人在挤奶的时间段.

• 最长的无人挤奶的时间段.

Input

Line 1: 一个整数N.

Lines 2..N+1: 每行两个小于1000000 的非负整数,表示一个农民的开始时刻与结束时刻.

Output

一行,两个整数,即题目所要求的两个答案.

Sample Input

3 300 1000 700 1200 1500 2100

Sample Output

900 300

题解:

再次重申!这个题型非常重要!!!

模拟算法就不说了,关键是这道题怎么模拟。

你要是想着标记数组,那你就是个弟弟。

(因为我一开始就是这么做的)

所以我考虑了结构体排序。

你想,现在是几条线段互相覆盖,我们这么去想,先按照每个区间的左端点从大到小排序,然后开始遍历所有的区间,假如这个区间的右端点比当前区间(用ll,rr存两个端点)还要大,那我们就更新,以此类推。

所以我们处理出ans1,ans2,最后输出就行。

看代码理解更配。

#include<bits/stdc++.h>
using namespace std;
int N; 
struct node
{
    int l,r;
}p[5005];
bool cmp(node a,node b)
{
    return a.l<b.l;
}
int main()
{
    scanf("%d",&N);
    for(int i=1;i<=N;i++)
        scanf("%d%d",&p[i].l,&p[i].r);
    sort(p+1,p+1+N,cmp);
    int ll=p[1].l;
    int rr=p[1].r;
    int ans1=0,ans2=0;
    for(int i=2;i<=N;i++)
    {
        if(p[i].l<=rr)
            rr=max(rr,p[i].r);
        else
        {
            ans1=max(ans1,rr-ll);
            ans2=max(ans2,p[i].l-rr);
            ll=p[i].l;
            rr=p[i].r;
        }
    }
    ans1=max(ans1,rr-ll);
    printf("%d %d",ans1,ans2);
    return 0;
}

免责声明:文章转载自《USACO Milking Cows》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇阿里云对象存储服务,OSS使用经验总结,图片存储,分页查询SpringApplication类-1下篇

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

随便看看

怎样将shp文件的坐标点导出来?

单击以选择保存类型中的文本文件,将经度和纬度输出为txt格式。坐标系统有两个选项。第一个是数据源的坐标系。数据的数据源坐标系为UTM,投影坐标系,单位为米。第二个是我开始设置的数据帧的坐标系,即WGS84,单位为度。。。。直接将获得的点的坐标生成到文本文件中。如果它是栅格文件,则来自rastrastertopint的arctoolboxconverttool...

vue之文本渲染

以前,我们一直使用{{}}的形式来呈现文本,但除了此方法之外,vue还提供了其他几种常见的文本呈现方法:v-text:更新元素的innerTextv html:更新元素一次的innerHTMLv:静态插值v-pre:以原始格式输出v-cooke:保留元素上的指令,直到相关实例完成编译˂!幸运的是,Vue还提供了v-text和v-html来呈现文本或元素。...

IIS 中 "另一个程序正在使用此文件,进程无法访问!"

然而,自从昨晚重新启动机器后,发现iis无法启动。手动启动并提示:“另一个程序正在使用此文件,进程无法访问它!”百度得知这是由港口冲突造成的。什么软件使用端口80?同时,我更改了iis的默认端口80,没问题。接下来,我想知道是哪一方秘密占用了端口80。但是,在执行上述命令后,我没有找到占用端口80的程序。我惊讶地发现没有人占用端口80。...

001_Three.js中的跨域问题

】当请求的资源和请求脚本不在同一域中时,将发生跨域。有关详细信息,请参见链接。这是一个需要进一步考虑的问题。它是一个装载机。它加载本地资源。为什么要跨域请求?...

mac下vscode插件位置

1、 位置:Mac:User/(您的用户名)/vscode/extensions II下vscode插件的存储位置。搜索步骤:以我的mac为例,打开查找器,单击远程CD,单击转到上面的文件夹,单击macintosh HD,单击用户(或用户),单击mymac,单击。vscode(.vscode是一个隐藏文件。如果默认情况下不显示,请按住ctrl+shift+....

Google Drive 里的文件下载的方法

Google Drive不提供创建直接下载链接的选项,但您可以通过更改链接形式在本地保存共享内容。例如,通过Google Drive共享的文件链接是:https://drive.google.com/file/d/FILE_ID/edit?usp=sharing如果您将其更改为以下修改版本,然后通过浏览器打开,则将直接下载该文件:https://drive....