Sicily 6768. Log Books 解题报告

题目传送门:6768. Log Books

 

思路:

1.  这道题比较麻烦的是输入,时间的格式如12:04 ,这样后面再计算加减的时候会有问题,所以干脆转化成分钟,没一个时刻用该时刻是当天的第多少分钟表示,如12:04可以表示为第12 * 60 + 4 = 724

2.  对于n个驾驶时间的信息,每次都要判断是否超过2个小时,按照题目只要有一次超过2个小时就NON。

3.  累加总的驾驶时间以便最后判断是否达到50小时,还有每次要判断是否在夜间驾驶,累加总的夜间驾驶时间判断是否达到10小时。

 

 

 

代码:

 1 #include <iostream>
 2 #include <stdio.h>
 3 using namespace std;
 4 
 5 
 6 int main(){
 7     int n;
 8     while(scanf("%d", &n) && n != 0){
 9         int start_time, finish_time, sunrise_time, sunset_time;
10         int hour, minute;
11         int driving_time_total = 0, night_driving_time_total = 0;
12         string result = "PASS";
13         for (int i = 0; i < n; ++i) {
14             //read in times and convert to minutes
15             scanf("%d:%d", &hour, &minute);
16             sunrise_time = hour * 60 + minute;
17             scanf("%d:%d", &hour, &minute);
18             sunset_time = hour * 60 + minute;
19             scanf("%d:%d", &hour, &minute);
20             start_time = hour * 60 + minute;
21             scanf("%d:%d", &hour, &minute);
22             finish_time = hour * 60 + minute;
23             int driving_time = finish_time - start_time;
24             if(driving_time >= 120){
25                 result = "NON";
26                 continue;
27             }
28             driving_time_total += (finish_time - start_time);
29             //judge if drive at night
30             if(start_time < sunrise_time && driving_time <= 2 * (sunrise_time - start_time))
31                 night_driving_time_total += driving_time;
32             else if(finish_time > sunset_time && driving_time <= 2 * (finish_time - sunset_time))
33                 night_driving_time_total += driving_time;
34         }
35         if(driving_time_total < 50 * 60)
36             result = "NON";
37         if(night_driving_time_total < 10 * 60)
38             result = "NON";
39         cout << result << endl;
40     }
41     return 0;
42 }

 

posted @ 2014-03-23 17:06  Jolin123  阅读(208)  评论(0编辑  收藏  举报