USACO训练场1.3 Milking Cows

博客记录了USACO训练场1.3题目的解决方案,涉及农民挤奶时间的最长连续时段计算。通过排序农民的开始和结束时间,分析不同情况,计算至少有一头牛在挤奶的最长时段和最长无挤奶时段。
摘要由CSDN通过智能技术生成

USACO训练场1.3 Milking Cows

每天一道题+个人总结打卡
此博客仅用于记录学习

题目:
Three farmers rise at 5 am each morning and head for the barn to milk three cows. The first farmer begins milking his cow at time 300 (measured in seconds after 5 am) and ends at time 1000. The second farmer begins at time 700 and ends at time 1200. The third farmer begins at time 1500 and ends at time 2100. The longest continuous time during which at least one farmer was milking a cow was 900 seconds (from 300 to 1200). The longest time no milking was done, between the beginning and the ending of all milking, was 300 seconds (1500 minus 1200).

Your job is to write a program that will examine a list of beginning and ending times for N (1 <= N <= 5000) farmers milking N cows and compute (in seconds):

The longest time interval at least one cow was milked.
The longest time interval (after milking starts) during which no cows were being milked.

大致思路:
先按每个farmer的开始时间从小到大排序,然后会有以下几种情况。

  1. farmer2的开始时间<=farmer1的结束时间,例如farmer1(100,700),farmer2(500,1200)
  2. farmer2的开始时间>farmer1的结束时间,也就是说两个farmer的时间段没有相交,例如farmer1(100,200),farmer2(400,500)
  3. farmer2的时间段包含在farmer1里,例如farmer1(100,1200),farmer2(300,500)

首先用一个变量cnt_ed来存储上一个farmer的结束时间,然后判断当前这个farmer的起始时间是<=上个farmer的结束时间还是>上个farmer的结束时间,这里有个if和else的分支。
如果当前farmer的起始时间<=上个farmer的结束时间,也就是说个时间段有覆盖关系,先要再判断一下这个farmer的开始和结束的时间段是不是被包含在了上个farmer的开始和结束时间段里,例如,上个farmer(100,1300),这个farmer(200,600),如果存在这种包含关系,就是上面说的情况3,那么就直接continue。如果不存在包含关系,那么一个临时存储答案的变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值