题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3219
题目意思:某人去上班,上班的路上分为n段每段都有标志,也就是总共n+1处标志,第一个标志是他上车的地方,第n+1个标志就是他工作的地方也就是目的地。在每某段 i 中给定某个时间段,在这段时间里为交通阻塞期,正常通过第 i 段需花费 a[i]的时间,若赶上阻塞期则需多花费b[i]的时间。
告诉你每段的情况,问你后他能否准时到达工作地。
这个题有几个注意事项:在阻塞期的开始和结束时间为开区间,到达的时间为闭区间,另外这里的时间都为一天内的情况,若时间大于24点说明晚了一天。
代码如下:
#include <iostream> #include <cstdio> using namespace std; int zhengc[101],yanchi[101]; int times[101],timee[101]; int ts,te; int main(){ int n; while(scanf("%d",&n)&&n){ int a,b,c,d,i; for(i=1;i<=n;i++){ scanf("%d%d",&zhengc[i],&yanchi[i]); yanchi[i]+=zhengc[i]; scanf("%d:%d %d:%d",&a,&b,&c,&d); times[i]=a*60+b; timee[i]=c*60+d; } scanf("%d:%d %d:%d",&a,&b,&c,&d); ts=a*60+b; te=c*60+d; bool mark=true; int tt; for(i=1;i<=n;i++){ tt=ts+zhengc[i]; if(tt>=1440){ mark=false; break; } if(tt<=times[i] || ts>=timee[i]){ ts+=zhengc[i]; if(ts>=te || ts>=1440){ mark=false; break; } }else{ ts+=yanchi[i]; if(ts>=te || ts>=1440){ mark=false; break; } } } if(mark){ if(ts<te){ printf("Lucky YY!\n"); }else{ printf("Poor YY!\n"); } }else{ printf("Poor YY!\n"); } } return 0; }