問題概要
太郎君は健康のために、毎日、寝た時刻と起きた時刻の記録をとっています。
入力に、寝た時刻と起きた時刻のリストが与えられるので、
睡眠時間の合計を出力してください。
太郎君は、1回につき24時間以上眠り続けることは無いものとします。
太郎君の世界は1日あたり24時間、1時間は60分で表されます。
記録の数は$N$個与えられる。
$N\leqq30$
解法
24時間以上寝ることは無いので起床時間を大きくして計算をすると楽です。
計算量:$O(N)$
ソース
#include <bits/stdc++.h> using namespace std; #define FOR(i, s, e) for (int(i) = (s); (i) < (e); (i)++) int main() { int N; cin >> N; int ans = 0; FOR(i, 0, N) { int H, M, h, m; scanf("%d:%d %d:%d", &H, &M, &h, &m); int rising = (60 * (h + 24) + m); int bed = 60 * H + M; ans += (rising - bed) % 1440; } cout << ans << "\n"; return 0; }