1.2.1 Milking Cows 挤牛奶

Time Limit: 1 Sec  Memory Limit: 64 MB
Submit: 554  Solved: 108
[Submit][Status][Forum]

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

  经典贪心题。

  对于最长的挤奶时间,需要控制的是挤奶结束时间最晚的那个区间和那个结束点,如果下一个区间是在这个点之前结束的,直接continue就好,它对答案没有影响,如果是在这个点之前而且该区间的开始时间要小于这个点的话,就要更新答案和最后结束的那个点,否则,就说明一段连续的挤奶时间结束,和之前存储的最大的挤奶时间进行比较。

  对于最长的无人挤奶的时间,也是查不多的思想。

但是,还会有一些细节需要注意,我在代码中给出标识。

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<queue>
 7 #include<stack>
 8 #include<deque>
 9 #include<map>
10 #include<iostream>
11 using namespace std;
12 typedef long long  LL;
13 const double pi=acos(-1.0);
14 const double e=exp(1);
15 //const int MAXN =2e5+10;
16 const int N = 5009;
17
18 struct inteval
19 {
20     LL head;
21     LL tail;
22 } inteval[N];
23 LL  check[N];
24
25 bool cmp(struct inteval a,struct inteval b)
26 {
27     if(a.head==b.head)
28         return a.tail<b.tail;
29     return a.head<b.head;
30 }
31 int main()
32 {
33     LL n,i,p,j;
34     LL work=0,rest=0;
35
36     scanf("%lld",&n);
37     for(i=0; i<n; i++)
38     {
39         scanf("%lld%lld",&inteval[i].head,&inteval[i].tail);
40     }
41     sort(inteval,inteval+n,cmp);
42
43     LL a,b,mid=inteval[0].tail-inteval[0].head;
44
45     work=mid=inteval[0].tail-inteval[0].head;
46     b=inteval[0].tail;
47     for(i=1; i<n; i++)
48     {
49         a=inteval[i].tail;
50         if(a<=b)
51             continue;
52         else if(inteval[i].head<=b)
53         {
54             mid+=a-b;
55             b=a;
56         }
57         else
58         {
59             if(mid>work)
60                 work=mid;
61             mid=a-inteval[i].head;
62             b=inteval[i].tail;           //注意   最晚结束的那个点在这里不应该赋为零
63         }
64
65     }
66     if(mid>work)      //注意  最后还要再比较一次
67         work=mid;
68
69     b=inteval[0].tail;
70     for(i=1;i<n;i++)
71     {
72         a=inteval[i].head;
73         if(b>=a)
74         {
75             if(inteval[i].tail>b)
76                 b=inteval[i].tail;
77             continue;
78         }
79         else
80         {
81             mid=a-b;
82             b=inteval[i].tail;
83             if(mid>rest)
84                 rest=mid;
85         }
86     }
87                                    // 注意  找最长的无人挤奶的时间段最后不能再比一次
88     printf("%lld %lld\n",work,rest);
89
90     return 0;
91 }

View Code

  

转载于:https://www.cnblogs.com/daybreaking/p/9694943.html

Milking Cows 挤牛奶相关推荐

  1. 【USACO题库】1.2.1 Milking Cows挤牛奶

    一开始认为过不了,后来交就AC了. 1007. [USACO题库]1.2.1 Milking Cows挤牛奶 (File IO): input:milk.in output:milk.out 题目描述 ...

  2. [USACO 1.2.1] Milking Cows 挤牛奶

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

  3. 【USACO1.2_1】★Milking Cows 挤牛奶

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

  4. [USACO 1.2.1] Milking Cows

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

  5. 挤牛奶Milking Cows

    挤牛奶Milking Cows 这道题问的是有一条线段覆盖的最大区间和没有线段覆盖的区间. 先按照起点排序,然后从第二条线段开始判断.如果该线段的起点小于上一线段终点,则说明这两条线 段有重合部分,将 ...

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

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

  7. USACO_CHA1_挤牛奶

    一.题目描述 链接:https://www.acwing.com/problem/content/1345/ 来源:ACwing 每天早上 5 点,三名农夫去牛场给奶牛们挤奶. 现在从 5 点开始按秒 ...

  8. USACO 1.3.1 挤牛奶

    1.3.1 挤牛奶 题目考查 区间合并 解题思路 我们将所有挤奶的区间按照左端点从小到大排序, 遍历所有区间. 不妨设当前连续的区间为[L, R], 遍历到的新区间为[l, r]. 此时有两种情况: ...

  9. DP地狱训练 挤牛奶

    1257: [DP地狱训练]挤牛奶 时间限制: 1 Sec  内存限制: 64 MB 提交: 917  解决: 260 [提交][状态][讨论版] 题目描述 小卡卡终于帮农夫John找到了走丢的那一头 ...

最新文章

  1. 2019-2020中国趋势报告,203页PPT解读16大机会
  2. Comparable和Comparator的比较
  3. Javascript 笔记与总结(2-6)var
  4. STL-bitset源码解析
  5. 在一个公司10年,会怎么样?
  6. Unix系统的diff工具程序
  7. Android学习之在Eclipse看源代码的技巧
  8. iPhone 13的新对手?小米历史上最好看的手机即将发布
  9. 后端的日期类型赋值前端表单_Spring Boot实践--前端字符串日期自动转换成后台date类型。...
  10. mysql 常用计算函数_关于MySQL常用的一些函数以及一些计算
  11. java panel paint_java – 如何使用jpanel与paint(或重绘)
  12. Activiti学习(二)之工作流的入门与流程实列
  13. 数据库系统的结构和组成
  14. 转:移动建站工具(一):分秒钟将Web网站移动化
  15. (转)什么是BD,怎么做一个好BD
  16. 下一代Windows家庭服务器Vail本地化版本发布
  17. OceanBase | 一文了解OBCA认证内容
  18. 关于浏览器核心的一些思考
  19. PhoneGap移动开发框架2
  20. 在Windows 7镜像中整合“SP2”补丁

热门文章

  1. jquery图片播放切换插件
  2. wp 删除独立存储空间文件(多级非空文件夹删除)
  3. 一生受益的三个小故事
  4. 近来工作和面试一些人的感受(原)
  5. html无规律卡片布局,如何实现同等间隙的卡片布局
  6. FPGA设计细节和实现(初学者)
  7. (一次性搞定)ORB_SLAM2地图保存与加载
  8. 如何提高服务器响应的数据速度_如何提高攻牙速度
  9. 浅谈对html css的理解,HTML+CSS入门 CSS选择器 、属性和值浅谈
  10. 金山android 杀毒软件,金山手机卫士