けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

JOI 予選 2009 A - タイムカード (AOJ 0532) (7Q, 難易度 1)

tuple 値を上手に扱う問題!

問題概要

A さん、B さん、C さんの出社時刻と退社時刻がそれぞれ与えられる。時刻は 3 つの整数  h, m, s で与えられ、それぞれ時刻の時間、分、秒を表す。

3 人それぞれの出勤時間を上述の 3 つの整数で表せ。

制約

  •  7 \le h \le 22
  •  0 \le m, s \le 59

考えたこと

出社時刻も退社時刻もともに 0 時 0 分 0 秒時点からの「秒数」で表してしまうのが楽だと思われる。

時刻「 h m s 秒」の、0 時 0 分 0 秒を起点とした経過時間は、次のように求められる。


 3600 h + 60 m + s (秒)


出社時刻と退社時刻をともにこの形式で表して、差をとり、それを再び「時間、分、秒」のフォーマットに直せば良い。なお、 x 秒をフォーマットに直すには


  • x / 3600 (時間)
  • `(x / 60) % 60' (分)
  • x % 60 (秒)

と求められる。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    for (int iter = 0; iter < 3; iter++) {
        int h1, m1, s1, h2, m2, s2;
        cin >> h1 >> m1 >> s1 >> h2 >> m2 >> s2;

        int x1 = h1 * 3600 + m1 * 60 + s1;
        int x2 = h2 * 3600 + m2 * 60 + s2;
        int x = x2 - x1;

        cout << x / 3600 << " " << (x / 60) % 60 << " " << x % 60 << endl;
    }
}