はまやんはまやんはまやん

hamayanhamayan's blog

路線バスの時刻表 [パソコン甲子園2014 予選 D]

https://onlinejudge.u-aizu.ac.jp/challenges/sources/PCK/Prelim/0298?year=2014

考察過程

1. 時間と分のセットで扱うのは面倒なので、全て分に直そう(典型の考え方)
2. あとは、1つにまとめてソートして出力すればいい
3. 重複している部分はuniqueを使って除けばいい

解法

https://onlinejudge.u-aizu.ac.jp/status/users/hamayanhamayan/submissions/1/0298/judge/3156129/C++14

h時間とm分になっている表記をh*60+mとして分に統一しておく。
2つの時刻表を1つの配列に入れてソートする。
unique関数で重複を取り除いたら1つの時刻表にまとまったことになるので、
あとは、時間と分に表記を直して答え。
分は0埋めの2桁で表示するので、printfでは%02dで出力する。

int N;
//---------------------------------------------------------------------------------------------------
void _main() {
    vector<int> v;

    rep(_, 0, 2) {
        cin >> N;
        rep(i, 0, N) {
            int h, m; cin >> h >> m;
            v.push_back(h * 60 + m);
        }
    }
    
    sort(all(v));
    v.erase(unique(all(v)), v.end());

    rep(i, 0, v.size()) {
        if (i) printf(" ");
        printf("%d:%02d", v[i] / 60, v[i] % 60);
    }
    printf("\n");
}