AtCoder

ABC297 A問題(Double Click)を解く

AtCoder_ABC297_A

AtCoder が提供しているABC(AtCoder Beginner Contest)297 のA問題をC++とPythonで解いてみました。ABC297は、2023年4月9日21:00に実施されました。

AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。

A問題 Double Click(Difficulty : 16)

問題はリンク先をご覧ください。

ABC297 A問題 Double Click

与えられた数列が条件を満たすか確認する問題です。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問題も過去と比較して難しくなっていると思います。

ABC297 について、引き続き、E問題まで紹介します。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA