题目描述

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

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

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

最长的无人挤奶的时间段。(从有人挤奶开始算起)

输入输出格式

输入格式:

Line 1:

一个整数N。

Lines 2..N+1:

每行两个小于1000000的非负整数,表示一个农民的开始时刻与结束时刻。

输出格式:

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

输入输出样例

输入样例#1:

3
300 1000
700 1200
1500 2100
输出样例#1:

900 300

说明

题目翻译来自NOCOW。

USACO Training Section 1.2

题解:前缀和打标记模拟

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,x,y,l,r,ans_youren,ans_wuren,youren,wuren;
int sum[];
int main(){
scanf("%d",&n);
l=0x7fffffff;r=-;
ans_youren=ans_wuren=-;
for(int i=;i<=n;i++){
scanf("%d%d",&x,&y);
l=min(l,x);
r=max(r,y);
sum[x]++;sum[y]--;
}
for(int i=l;i<=r;i++)sum[i]+=sum[i-];
for(int i=l;i<=r;i++){
if(sum[i]){
ans_wuren=max(ans_wuren,wuren);
wuren=;
youren++;
}else{
ans_youren=max(ans_youren,youren);
youren=;
wuren++;
}
}
cout<<ans_youren<<" "<<ans_wuren<<endl;
return ;
}

另一种做法,洛谷的标签是线段树,题解中有个用线段树离散化做的,把每一个时间段看成一个点,

点值为时间长短,把空闲时间的点值看做负数,最后求最大值和最小值的负数即可。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; #define maxn 5009
#define lson rt<<1,l,mid
#define rson rt<<1|1,mid+1,r int n,z[maxn]; struct T{
int l,r;
bool operator < (const T &a)const {
return l<a.l;
}
}t[maxn]; struct Tree{
int minl,maxl;
}tr[maxn<<]; void update(int rt){
tr[rt].minl=min(tr[rt<<].minl,tr[rt<<|].minl);
tr[rt].maxl=max(tr[rt<<].maxl,tr[rt<<|].maxl);
} void build(int rt,int l,int r){
if(l==r){
tr[rt].minl=min(,z[l]);
tr[rt].maxl=z[l];
return;
}
int mid=(l+r)>>;
build(lson);build(rson);
update(rt);
return;
} int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d%d",&t[i].l,&t[i].r);
sort(t+,t+n+);
int p=,ll=t[].l,rr=t[].r;
for(int i=;i<=n;i++){
if(t[i].l>=ll&&t[i].r<=rr)continue;
if(t[i].l<=rr&&t[i].r>rr)rr=t[i].r;
else {
z[++p]=rr-ll;
z[++p]=-(t[i].l-rr);
ll=t[i].l;rr=t[i].r;
}
}
z[++p]=rr-ll;
build(,,p);
printf("%d %d",tr[].maxl,-tr[].minl);
return ;
}

P1204 [USACO1.2]挤牛奶Milking Cows的更多相关文章

  1. 洛谷P1204 [USACO1.2]挤牛奶Milking Cows

    P1204 [USACO1.2]挤牛奶Milking Cows 474通过 1.4K提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 请各位帮忙看下程序 错误 ...

  2. 【题解】Luogu P1204 [USACO1.2]挤牛奶Milking Cows

    原题传送门:P1204 [USACO1.2]挤牛奶Milking Cows 实际是道很弱智的题目qaq 但窝还是觉得用珂朵莉树写会++rp(窝都初二了,还要考pj) 前置芝士:珂朵莉树 窝博客里对珂朵 ...

  3. 洛谷 P1204 [USACO1.2]挤牛奶Milking Cows Label:模拟Ex 74分待查

    题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒.第二个农民在700秒开始,在 1200秒结束.第三个农民在1500秒开 ...

  4. 洛谷 P1204 [USACO1.2]挤牛奶Milking Cows

    题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒.第二个农民在700秒开始,在 1200秒结束.第三个农民在1500秒开 ...

  5. 洛谷—— P1204 [USACO1.2]挤牛奶Milking Cows

    https://www.luogu.org/problem/show?pid=1204 题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶, ...

  6. [USACO1.2]挤牛奶Milking Cows

    题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒.第二个农民在700秒开始,在 1200秒结束.第三个农民在1500秒开 ...

  7. 【洛谷P1204】【USACO1.2】挤牛奶Milking Cows

    P1204 [USACO1.2]挤牛奶Milking Cows 题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒.第二个 ...

  8. USACO Training Section 1.2 挤牛奶Milking Cows

    题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒.第二个农民在700秒开始,在 1200秒结束.第三个农民在1500秒开 ...

  9. Milking Cows 挤牛奶

    1.2.1 Milking Cows 挤牛奶 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 554  Solved: 108[Submit][Status ...

随机推荐

  1. 【甘道夫】Ubuntu14 server + Hadoop2.2.0环境下Sqoop1.99.3部署记录

    第一步.下载.解压.配置环境变量: 官网下载sqoop1.99.3 http://mirrors.cnnic.cn/apache/sqoop/1.99.3/ 将sqoop解压到目标文件夹,我的是 /h ...

  2. Android Camera API2中采用CameraMetadata用于从APP到HAL的参数交互

    前沿: 在全新的Camera API2架构下,常常会有人疑问再也看不到熟悉的SetParameter/Paramters等相关的身影,取而代之的是一种全新的CameraMetadata结构的出现,他不 ...

  3. Boost.Asio c++ 网络编程翻译(11)

    *_at方法 这些方法在一个流上面做随机存取操作.你来指定read和write操作从什么地方開始(offset): async_read_at(stream, offset, buffer [, co ...

  4. window下Opengl与vs2012环境配置

    一.opengl与C++环境配置 1. 下载opengl包. 2. 将压缩包解压后, (1)将.dll文件(GLU.DLL, GLUT.DLL, GLUT32.DLL)放到C:\Windows\Sys ...

  5. 【BZOJ2789】[Poi2012]Letters 树状数组

    [BZOJ2789][Poi2012]Letters Description 给出两个长度相同且由大写英文字母组成的字符串A.B,保证A和B中每种字母出现的次数相同. 现在每次可以交换A中相邻两个字符 ...

  6. 【BZOJ4976】宝石镶嵌 DP

    [BZOJ4976]宝石镶嵌 Description 魔法师小Q拥有n个宝石,每个宝石的魔力依次为w_1,w_2,...,w_n.他想把这些宝石镶嵌到自己的法杖上,来提升法杖的威力.不幸的是,小Q的法 ...

  7. vs2013 solution文件解析

    1 定义一个project Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "render", &quo ...

  8. Python中的staticmethod和classmethod

    谈谈Python中的staticmethod和classmethod 首先值得说明的是staticmethod和classmethod都是python中定义的装饰器,用的时候需要在前面加@ 即@sta ...

  9. Greedy Function Approximation:A Gradient Boosting Machine

    https://statweb.stanford.edu/~jhf/ftp/trebst.pdf page10 90% to 95% of the observations were often de ...

  10. 【题解】[SCOI2010]股票交易

    十分普通的DP+不平凡的转移 传送门 这道题状态十分明显.转移是\(O(n^4)\)的,过不去,我们需要优化. 一个十分显然的DP是\(f(i,j)\)表示第\(i\)天时候拥有\(j\)单位股票的最 ...