公式
B - Shout Everyday 解説
by
B - Shout Everyday 解説
by
toam
初心者の方へ
- プログラミングの学習を始めたばかりで何から手をつけるべきかわからない方は、まずは practice contest の問題A「Welcome to AtCoder」をお試しください。言語ごとに解答例が掲載されています。
- また、プログラミングコンテストの問題に慣れていない方は、 AtCoder Beginners Selection の問題をいくつか試すことをおすすめします。
- C++入門 AtCoder Programming Guide for beginners (APG4b) は、競技プログラミングのための C++ 入門用コンテンツです。
- Python入門 AtCoder Programming Guide for beginners (APG4bPython) は、競技プログラミングのための Python 入門用コンテンツです。
高橋君が寝ているときに日をまたぐかどうかで場合分けすることで解くことができます.
[1] 日をまたがない場合
高橋君は同じ日に就寝し起床するため,\(B<C\) が成り立ちます.寝ている時間は \(B\) 時から \(C\) 時なので,その間に \(A\) 時がある場合,すなわち \(B<A<C\) のときは答えは No
です.そうでない場合は答えは Yes
です.
[2] 日をまたぐ場合
一日の中では高橋君は先に起床し,その後就寝するため \(C<B\) が成り立ちます.起きている時間は \(C\) 時から \(B\) 時なので,その間に \(A\) 時がある場合,すなわち \(C<A<B\) のときは答えは Yes
です.そうでない場合は No
です.
実装例(Python)
A, B, C = map(int, input().split())
if B < C:
if B < A < C:
print("No")
else:
print("Yes")
else:
if C < A < B:
print("Yes")
else:
print("No")
実装例(C++)
#include <bits/stdc++.h>
using namespace std;
int main()
{
int A, B, C;
cin >> A >> B >> C;
if (B < C)
{
if (B < A && A < C)
cout << "No" << endl;
else
cout << "Yes" << endl;
}
else
{
if (C < A && A < B)
cout << "Yes" << endl;
else
cout << "No" << endl;
}
}
このような場合分けが多い問題において,場合分けを使わない方法があるときは,場合分けの漏れやミスによるペナルティを回避することができるため有効な手段となることがあります.
本問題においては,while 文を使うことで場合分けを回避することができます.\(B\) 時から時間を進めていき,\(C\) 時になるまでに \(A\) 時と一致するならば No
出力し,そうでないならば Yes
を出力すればよいです.
実装例 (Python)
A, B, C = map(int, input().split())
now = B
while now != C:
if now == A:
print("No")
exit()
now += 1
now %= 24
print("Yes")
投稿日時:
最終更新: