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

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

AtCoder ABC 228 A - On and Off (6Q, 灰色, 100 点)

これは結構大変!

問題概要

高橋君は、毎日  S 時 0 分に部屋の電気を点け、 T 時 0 分に部屋の電気を消す。電気をつけている間に日付が変わることもある。

 X 時 30 分に部屋の電気がついているかどうかを判定せよ。

解法

これは整理するのが大変だと思う。次の 2 つの場合に分けてじっくり整理しよう!

  •  S \lt T のとき (つまり、電気をつけている間に日付が変わるようなことがないとき)
  •  S \gt T のとき (つまり、電気をつけている間に日付が変わるとき)

前者のとき

この場合は、 X 時 30 分に部屋の電気がついているのは、

 S \le X \lt T

のときである。

後者のとき

この場合は、電気をつけている間に日付が変わることに注意しよう。 X 時 30 分に部屋の電気がついているのは、

  •  S \le X (\lt 24) のとき
  •  (0 \le) X \lt T のとき

である。

コード

以上の整理をプログラムにすればよい。

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

int main() {
    int S, T, X;
    cin >> S >> T >> X;
    
    if (S < T) {
        if (S <= X && X < T)
            cout << "Yes" << endl;
        else
            cout << "No" << endl;
    } else {
        if (X < T || S <= X)
            cout << "Yes" << endl;
        else
            cout << "No" << endl;
    }
}