您的位置:首页 > 其它

Sicily 6768. Log Books 解题报告

2014-03-23 17:06 435 查看
题目传送门:6768. Log Books

思路:

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

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

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

代码:

#include <iostream>
#include <stdio.h>
using namespace std;

int main(){
int n;
while(scanf("%d", &n) && n != 0){
int start_time, finish_time, sunrise_time, sunset_time;
int hour, minute;
int driving_time_total = 0, night_driving_time_total = 0;
string result = "PASS";
for (int i = 0; i < n; ++i) {
//read in times and convert to minutes
scanf("%d:%d", &hour, &minute);
sunrise_time = hour * 60 + minute;
scanf("%d:%d", &hour, &minute);
sunset_time = hour * 60 + minute;
scanf("%d:%d", &hour, &minute);
start_time = hour * 60 + minute;
scanf("%d:%d", &hour, &minute);
finish_time = hour * 60 + minute;
int driving_time = finish_time - start_time;
if(driving_time >= 120){
result = "NON";
continue;
}
driving_time_total += (finish_time - start_time);
//judge if drive at night
if(start_time < sunrise_time && driving_time <= 2 * (sunrise_time - start_time))
night_driving_time_total += driving_time;
else if(finish_time > sunset_time && driving_time <= 2 * (finish_time - sunset_time))
night_driving_time_total += driving_time;
}
if(driving_time_total < 50 * 60)
result = "NON";
if(night_driving_time_total < 10 * 60)
result = "NON";
cout << result << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: