AtCoder が提供しているABC(AtCoder Beginner Contest)297 のA問題をC++とPythonで解いてみました。ABC297は、2023年4月9日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
A問題 Double Click(Difficulty : 16)
問題はリンク先をご覧ください。
与えられた数列が条件を満たすか確認する問題です。AtCoder Problems による Difficulty は 16 でした。
解答案
N と D と数列 Ti を読み込み、問題の条件を満たしているか判断します。
C++ プログラム例(ABC297A)
以下を注意します。
- 差分を確認するため、ループ回数は1回少なくなっています(14行目)。
- 最初にダブルクリックが確定した時間を表示するため、条件を満たしたら break します(17行目)。
- ダブルクリックが一度も成立していない場合は、-1 を出力するため、変数 result の初期値を -1 にします(13行目)。
以下が、C++プログラムとなります。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, d;
cin >> n >> d;
vector<int> t(n);
for (int i = 0; i < n; ++i) {
cin >> t[i];
}
int result = -1;
for (int i = 0; i < n - 1; ++i) {
if (t[i + 1] - t[i] <= d) {
result = t[i + 1];
break;
}
}
cout << result << endl;
return 0;
}
AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC297A)
C++のロジックをそのまま Python に書き直しました。
"""AtCoder Beginner Contest 297 A"""
n, d = map(int, input().split())
t = list(map(int, input().split()))
result = -1
for i in range(n - 1):
if t[i + 1] - t[i] <= d:
result = t[i + 1]
break
print(result)
こちらも「AC」と判定されました。
最後に
ループ回数の1回違いミスや、ダブルクリックが成立しない場合を考慮するなどの配慮が必要です。A問題も過去と比較して難しくなっていると思います。
引き続き ABC の問題を紹介していきます。