Milking Cows 挤牛奶
1.2.1 Milking Cows 擠牛奶
Time Limit:?1 Sec??Memory Limit:?64 MBSubmit:?554??Solved:?108
[Submit][Status][Forum]
Description
三個(gè)農(nóng)民每天清晨5點(diǎn)起床,然后去牛棚給3頭牛擠奶。第一個(gè)農(nóng)民在300時(shí)刻(從5點(diǎn)開始計(jì)時(shí),秒為單位)給他的牛擠奶,一直到1000時(shí)刻。第二個(gè)農(nóng)民在700時(shí)刻開始,在 1200時(shí)刻結(jié)束。第三個(gè)農(nóng)民在1500時(shí)刻開始2100時(shí)刻結(jié)束。期間最長(zhǎng)的至少有一個(gè)農(nóng)民在擠奶的連續(xù)時(shí)間為900秒(從300時(shí)刻到1200時(shí)刻),而最長(zhǎng)的無人擠奶的連續(xù)時(shí)間(從擠奶開始一直到擠奶結(jié)束)為300時(shí)刻(從1200時(shí)刻到1500時(shí)刻)。 你的任務(wù)是編一個(gè)程序,讀入一個(gè)有N個(gè)農(nóng)民(1 <= N <= 5000)擠N頭牛的工作時(shí)間列表,計(jì)算以下兩點(diǎn)(均以秒為單位): 最長(zhǎng)至少有一人在擠奶的時(shí)間段。 最長(zhǎng)的無人擠奶的時(shí)間段。(從有人擠奶開始算起)
Input
Line 1: 一個(gè)整數(shù)N。 Lines 2..N+1: 每行兩個(gè)小于1000000的非負(fù)整數(shù),表示一個(gè)農(nóng)民的開始時(shí)刻與結(jié)束時(shí)刻。
Output
一行,兩個(gè)整數(shù),即題目所要求的兩個(gè)答案。
Sample Input
3 300 1000 700 1200 1500 2100
Sample Output
900 300
?
經(jīng)典貪心題。
對(duì)于最長(zhǎng)的擠奶時(shí)間,需要控制的是擠奶結(jié)束時(shí)間最晚的那個(gè)區(qū)間和那個(gè)結(jié)束點(diǎn),如果下一個(gè)區(qū)間是在這個(gè)點(diǎn)之前結(jié)束的,直接continue就好,它對(duì)答案沒有影響,如果是在這個(gè)點(diǎn)之前而且該區(qū)間的開始時(shí)間要小于這個(gè)點(diǎn)的話,就要更新答案和最后結(jié)束的那個(gè)點(diǎn),否則,就說明一段連續(xù)的擠奶時(shí)間結(jié)束,和之前存儲(chǔ)的最大的擠奶時(shí)間進(jìn)行比較。
對(duì)于最長(zhǎng)的無人擠奶的時(shí)間,也是查不多的思想。
但是,還會(huì)有一些細(xì)節(jié)需要注意,我在代碼中給出標(biāo)識(shí)。
?
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; //注意 最晚結(jié)束的那個(gè)點(diǎn)在這里不應(yīng)該賦為零 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 // 注意 找最長(zhǎng)的無人擠奶的時(shí)間段最后不能再比一次 88 printf("%lld %lld\n",work,rest); 89 90 return 0; 91 }View Code
?
轉(zhuǎn)載于:https://www.cnblogs.com/daybreaking/p/9694943.html
總結(jié)
以上是生活随笔為你收集整理的Milking Cows 挤牛奶的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 帮我找一些恋爱的电视剧电影
- 下一篇: 学术-数学:哥德巴赫猜想