Official
A - Timeout Editorial
by
A - Timeout Editorial
by
MtSaka
初心者の方へ
- プログラミングの学習を始めたばかりで何から手をつけるべきかわからない方は、まずは 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 入門用コンテンツです。
この問題は与えられた数列 \(T\) が長老が寝てしまう条件を満たしているか判定して Yes
か No
か答える問題です。
この問題では現在ちょうど肩を叩いた瞬間のため、\(T_0=0\) であるとします。
では、まず長老が寝てしまう条件を考えましょう。\(T_i\) 秒後に肩を叩かれるときまでは長老が起きているとします。この後、\(T_{i+1}-T_i \leq S\) のときは長老は\(T_i\) 秒後に肩を叩かれてから \(T_{i+1}\) 秒後に肩を叩かれるまで寝ません。しかし、 \(T_{i+1}-T_i > S\) のとき、長老は \(T_i+S+0.5\) 秒後\((<T_{i+1})\) に寝てしまいます。
つまり、\(T_{i+1}-T_i >S\) を満たす \(i(0 \leq i \leq N-1)\) が存在するとき、長老が寝てしまいます。
数列 \(T\) をfor文を用いて入力し、その後それぞれの \(i\) についてfor文とif文を用いることで判定することでこの問題が解くことができます。実装の際は寝る条件をある \(i\) で満たしたときにすぐNo
と出力しプログラムを終了させる方法や、条件を満たす \(i\) が存在するかのフラグを持つ真偽値を管理する方法があります。
実装例(C++)
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, s;
cin >> n >> s;
vector<int> t(n + 1, 0);
for (int i = 1; i <= n; ++i)
cin >> t[i];
for (int i = 1; i <= n; ++i) {
if (t[i] - t[i - 1] > s) { // 寝るか判定
cout << "No" << endl;
return 0; // プログラムを終了
}
}
cout << "Yes" << endl;
}
実装例(Python)
n, s = map(int, input().split())
t = list(map(int, input().split()))
if t[0] > s:
print("No")
exit()
for i in range(1, n):
if t[i] - t[i - 1] > s: #寝るか判定
print("No")
exit() #プログラムを終了
print("Yes")
posted:
last update: