链接:http://codeforces.com/problemset/problem/387/A
George woke up and saw the current time s on the digital clock. Besides, George knows that he has slept for time t.
Help George! Write a program that will, given time s and t, determine the time p when George went to bed. Note that George could have gone to bed yesterday relatively to the current time (see the second test sample).
The first line contains current time s as a string in the format "hh:mm". The second line contains time t in the format "hh:mm" — the duration of George's sleep. It is guaranteed that the input contains the correct time in the 24-hour format, that is, 00 ≤ hh ≤ 23, 00 ≤ mm ≤ 59.
In the single line print time p — the time George went to bed in the format similar to the format of the time in the input.
05:50 05:44
00:06
00:00 01:00
23:00
00:01 00:00
00:01
In the first sample George went to bed at "00:06". Note that you should print the time only in the format "00:06". That's why answers "0:06", "00:6" and others will be considered incorrect.
In the second sample, George went to bed yesterday.
In the third sample, George didn't do to bed at all.
大意——给你当前的时间和持续睡眠的时间,问你上床睡觉的时间是何时?所有时间均采用24小时格式。
思路——直接模拟。用当前时间的小时和分钟直接减去持续睡眠时间的小时和分钟即可。最后分别判断一下小时和分钟的符号并做相应处理即可。
复杂度分析——时间复杂度:O(1),空间复杂度:O(1)
附上AC代码:
#include <iostream> #include <cstdio> #include <string> #include <cmath> #include <iomanip> #include <ctime> #include <climits> #include <cstdlib> #include <cstring> #include <algorithm> #include <queue> #include <vector> #include <set> #include <map> //#pragma comment(linker, "/STACK:102400000, 102400000") using namespace std; typedef long long ll; const double pi = acos(-1.0); const double e = exp(1.0); const double eps = 1e-8; short chour, cmin; short lhour, lmin; int main() { ios::sync_with_stdio(false); while (~scanf("%hd:%hd", &chour, &cmin)) { scanf("%hd:%hd", &lhour, &lmin); int hour = chour-lhour; int min = cmin-lmin; if (min < 0) { min += 60; hour -= 1; } if (hour < 0) hour += 24; printf("%02d:%02d\n", hour, min); } return 0; }