HDU 4509 湫湫系列故事——减肥记II(模拟)
2014-04-10 17:46
363 查看
题目:
http://acm.hdu.edu.cn/showproblem.php?pid=4509
题解:
1.按事情的开始时间排序
2.设strattime与endtime的初值为第一件事情的开始时间与结束时间
3.遍历所有事情,对于遍历到的事情,该事情的开始时间有两种情况,
情况A:在starttime与endtime之间,与前一时间段有重叠,更新endtime=max(endtime,该事情的结束时间)。
情况B:在endtime之后,那么与前一段时间无重叠。统计前一时间段之差,更新starttime为该事情的开始时间,endtime为该事情的结束时间。
4.遍历完后,最后一个时间段的时间未统计,要统计。
代码:
http://acm.hdu.edu.cn/showproblem.php?pid=4509
题解:
1.按事情的开始时间排序
2.设strattime与endtime的初值为第一件事情的开始时间与结束时间
3.遍历所有事情,对于遍历到的事情,该事情的开始时间有两种情况,
情况A:在starttime与endtime之间,与前一时间段有重叠,更新endtime=max(endtime,该事情的结束时间)。
情况B:在endtime之后,那么与前一段时间无重叠。统计前一时间段之差,更新starttime为该事情的开始时间,endtime为该事情的结束时间。
4.遍历完后,最后一个时间段的时间未统计,要统计。
代码:
#include<cstdio> #include<stdlib.h> const int maxn=500005; struct time { int start; int end; }t[maxn]; int cmp(const void*a,const void*b) { time*c=(time*)a; time*d=(time*)b; return c->start-d->start; } int max(int a,int b) { return a>b?a:b; } int main() { int N; while(~scanf("%d",&N)) { int a,b,c,d; char ss; int i; for(i=0;i<N;i++) { scanf("%d%c%d%d%c%d",&a,&ss,&b,&c,&ss,&d); t[i].start=a*60+b; t[i].end=c*60+d; } qsort(t,N,sizeof(t[0]),cmp); int starttime=t[0].start,endtime=t[0].end; int alltime=0; for(i=1;i<N;i++) { if(t[i].start<=endtime) { endtime=max(endtime,t[i].end); } else { alltime+=(endtime-starttime); starttime=t[i].start; endtime=t[i].end; } } alltime+=(endtime-starttime); printf("%d\n",1440-alltime); } return 0; }
相关文章推荐
- HDU 4509 湫湫系列故事——减肥记II (简单模拟)
- HDU 4509 湫湫系列故事——减肥记II(暴力模拟即可)
- HDU 4509 湫湫系列故事——减肥记II
- HDU 4509 湫湫系列故事——减肥记II(线段树)
- HDU 4509 湫湫系列故事——减肥记II
- HDU 4509 湫湫系列故事——减肥记II(暴力 || 线段树单点替换)
- HDOJ 4509 湫湫系列故事——减肥记II(2013腾讯编程马拉松)
- Hdu 4509 湫湫系列故事——减肥记II
- hdu 4509 湫湫系列故事――减肥记II
- hdu 4508/hdu 4509 湫湫系列故事——减肥记
- HDU 4509 湫湫系列故事——减肥记II 线段树
- HDOJ 4509 湫湫系列故事——减肥记II
- [HDOJ 4509] 湫湫系列故事――减肥记II
- hdu 4544 湫湫系列故事——消灭兔子(贪心+优先队列)
- 最短路 hdu-4522 湫湫系列故事——过年回家
- 最短路 hdu-4522 湫湫系列故事——过年回家
- hdu 4503 湫湫系列故事——植树节
- HDU 4544 湫湫系列故事——消灭兔子
- hdu 4503 湫湫系列故事——植树节 组合概率
- hdu 4544 湫湫系列故事——消灭兔子(贪心+优先队列)