Milking Cows 挤牛奶 USACO 排序 模拟
1005: 1.2.1 Milking Cows 挤牛奶
时间限制: 1 Sec 内存限制: 128 MB
提交: 15 解决: 9
[提交] [状态] [讨论版] [命题人:外部导入]
题目描述
1.2.1 Milking Cows 挤牛奶
(milk2.pas/c/cpp)
三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶。第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒。第二个农民在700秒开始,在 1200秒结束。第三个农民在1500秒开始2100秒结束。期间最长的至少有一个农民在挤奶的连续时间为900秒(从300秒到1200秒),而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为300秒(从1200秒到1500秒)。
你的任务是编一个程序,读入一个有N个农民(1 <= N <= 5000)挤N头牛的工作时间列表,计算以下两点(均以秒为单位):
- 最长至少有一人在挤奶的时间段。
- 最长的无人挤奶的时间段。(从有人挤奶开始算起
文件名: milk2
输入:
(file milk2.in)
Line 1:
一个整数N。
Lines 2..N+1:
每行两个小于1000000的非负整数,表示一个农民的开始时刻与结束时刻。
输出:
(file milk2.out)
一行,两个整数,即题目所要求的两个答案。
3
300 1000
700 1200
1500 2100
SAMPLE OUTPUT
900 300
提示

来源/分类
我的天哪 这道题难道有那么难吗
有n(<=5000)个区间
这n个区间在0-100 0000之间
p.s.个人认为就是个简单的排序+模拟。。。
我想的是先把这些区间按照起始时间排一个序(快排比较简单吧nlogn)
So?设一个指针从0-时间的最大值 跑一遍 再+100 0000 那肯定超时啊。。。。
看来这么整不行 呜呜呜~~~~
嗷嗷嗷好像明白了 在1-100 0000之间其实还是有很多点没有扫到
而且既然直接从1-100 0000扫会超时 只要把n个区间的起始点排好序以后 把这n个区间从前往后扫一遍不就OK了吗 +5000肯定不超时啦!!!(暗暗地说:对呀!!天哪我刚才咋么没想到!)
那在扫的时候怎么模拟呢?
emmmm。。。
沉思片刻 再看看题吧
最长至少有一人在挤奶的时间段。
最长的无人挤奶的时间段。(从有人挤奶开始算起
第一个只要打一个擂台就行了 在从前往后枚举区间的时候看看有没有接起来或者重叠 其实也就是是否相连
再简单一点就是判断当前区间的起点是否小于等于tmpend 然后tmpend每次和当前区间打擂台取一个最大值
第二个。。天哪咋办。。原地懵圈
停停停再想想O(∩_∩)O哈哈~
如果当前区间的begin比tmpend大
那就相当于不相连了 而且可以保证这之间没有别的区间进来掺和了
为甚么呢》
其实也很简单 tmpend其实存的也就是到当前区间为止最大最靠后的区间的end值
那么最靠后的在tmpend 那tmpend~当前枚举区间的begin之间当然就没有别的区间啦
6666
敲一敲试试吧
AC了!
我的代码变量名可能很通俗易懂 O(∩_∩)O哈哈~
还有一个非常重要的问题
以后打擂台的时候假如要寻找最大值
初始的maxn一定要设成0 别设成-1 比如这一个题的最长的无人时间 可能每时每刻都有人啊 那你要是一开始的时候设得-1就输出了-1 其实应该是 0 !
下一次不要再犯错误了(~ ̄▽ ̄)~
#include<bits/stdc++.h>
using namespace std;
struct Node{
int Begin,End;//结构体大法好
}milk[];
int cmp(Node a,Node b){
return a.Begin<b.Begin;//其实那个End不用考虑啊
}
int main(){
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d%d",&milk[i].Begin,&milk[i].End);
sort(milk+,milk+n+,cmp);//sort排序一下 再加一个cmp
int tmpend=milk[].End , max_at_least_1=milk[].End-milk[].Begin , max_nobody=;
int at_least_1_tot=milk[].End-milk[].Begin;
for(int i=;i<=n;i++){
if(milk[i].Begin<=tmpend){//区间相连
if(milk[i].End>=tmpend)
at_least_1_tot+=milk[i].End-tmpend;
tmpend=max(tmpend,milk[i].End);
}
else{//有空隙
max_at_least_1=max(max_at_least_1,at_least_1_tot);//取最大值
at_least_1_tot=milk[i].End-milk[i].Begin;//还原重新累计
max_nobody=max(max_nobody,milk[i].Begin-tmpend);
tmpend=max(tmpend,milk[i].End);
}
}
printf("%d %d", max_at_least_1 , max_nobody ); return ;
}
Milking Cows 挤牛奶 USACO 排序 模拟的更多相关文章
- Milking Cows 挤牛奶
1.2.1 Milking Cows 挤牛奶 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 554 Solved: 108[Submit][Status ...
- Milking Cows /// 区间计数 离散化排序 oj10105
题目大意: 输入n 接下来描述1~n位农夫挤牛奶的开始与结束时间 Sample Input 3300 1000700 12001500 2100 Sample Output 900 300 注意 ...
- codevs——1385 挤牛奶
1385 挤牛奶 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题解 查看运行结果 题目描述 Description 三个农民每天清 ...
- 洛谷P1204 [USACO1.2]挤牛奶Milking Cows
P1204 [USACO1.2]挤牛奶Milking Cows 474通过 1.4K提交 题目提供者该用户不存在 标签USACO 难度普及- 提交 讨论 题解 最新讨论 请各位帮忙看下程序 错误 ...
- 【洛谷P1204】【USACO1.2】挤牛奶Milking Cows
P1204 [USACO1.2]挤牛奶Milking Cows 题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒.第二个 ...
- 【题解】Luogu P1204 [USACO1.2]挤牛奶Milking Cows
原题传送门:P1204 [USACO1.2]挤牛奶Milking Cows 实际是道很弱智的题目qaq 但窝还是觉得用珂朵莉树写会++rp(窝都初二了,还要考pj) 前置芝士:珂朵莉树 窝博客里对珂朵 ...
- [USACO1.2]挤牛奶Milking Cows
题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒.第二个农民在700秒开始,在 1200秒结束.第三个农民在1500秒开 ...
- USACO Section 1.2 Milking Cows 解题报告
题目 题目描述 有3个农夫每天早上五点钟便起床去挤牛奶,现在第一个农夫挤牛奶的时刻为300(五点钟之后的第300个分钟开始),1000的时候结束.第二个农夫从700开始,1200结束.最后一个农夫从1 ...
- codeforce ---A. Milking cows
A. Milking cows time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
随机推荐
- poj2632 累死了
题意: 给定A*B的格子,放入N个机器人,每个机器人初始位置及朝向给定.给定M条指令.指令类型有三种: 1.L:左转90° 2.R:右转90° 3.F:前进一格 问执行指令过程中 ...
- JUnit 单元测试断言推荐 AssertJ
文章转自:http://sgq0085.iteye.com/blog/2030609 前言 由于JUnit的Assert是公认的烂API,所以不推荐使用,目前推荐使用的是AssertJ. Assert ...
- Numpy 返回数组大小
import numpy as np a = [[1, 2], [3, 4], [5, 6]] b = np.array(a) len(a) # 3 len(b) # 3 np.size(a) # 3 ...
- ZR9.8普转提
ZR9.8普转提 A,B 打过的CF原题,不管了 C 确认过眼神,是我不会写的DP, 发现这个题目要求的过程类似与一个所有括号都不一样的括号匹配的过程 但是限制条件非常多,有点无从下手的感觉 我们设\ ...
- HDU - 1005 Number Sequence (矩阵快速幂)
A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mo ...
- python调用另一个文件中的代码,pycharm环境下:同文件夹下文件(.py)之间的调用,出现红线问题
如何调用另一个python文件中的代码无论我们选择用何种语言进行程序设计时,都不可能只有一个文件(除了“hello world”),通常情况下,我们都需要在一个文件中调用另外一个文件的函数呀数据等等, ...
- CentOS 7 修改root密码
1.开机,在启动菜单上选择CentOS Linux (3.10**.**.x86**) 7 (Core) 按下e,进入编辑模式2.将光标一直移动到 LANG=en_US.UTF-8 后面(如果找不到, ...
- LeetCode3_无重复字符的最长子串(数组&字符串问题)
题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "ab ...
- URL统一资源定位符
URI 是统一资源标识符 URL 是统一资源定位符 ===================================================== 参考链接: 前端学HTTP之URL:ht ...
- MyBatis整合Spring MVC(易百教程)
MyBatis是ibatis的升级版,作为hibernate的老对手,它是一个可以自定义SQL.存储过程和高级映射的持久层框架.与Hibernate 的主要区别就是 Mybatis 是半自动化的,而 ...