AtCoder

ABC358 B問題(Ticket Counter)を解く

AtCoder_ABC358_B

AtCoder が提供しているABC(AtCoder Beginner Contest)358 B問題をC++とPythonで解いてみました。ABC358は、2024年6月15日21:00に実施されました。

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

B問題 Ticket Counter(Difficulty : 43)

問題の詳細は、リンク先をご覧ください。

ABC358 B問題 Ticket Counter

チケット購入を待つのか、すぐに処理するのかで場合分けします。AtCoder Problems による Difficulty は 43 でした。

解答案

C++ プログラム例(ABC358B)

配列 result に結果を格納します。

  • result[0] = t[0] + a とします。
  • 前の人の処理を待つか、売り場に来た時に処理するかで場合分けします。
    • 前の人を待つ場合、result[i] = result[i-1] + a となります。
    • 売り場に来た時に処理する場合、result[i] = t[i] + a となります。
    • 結果的に、result[i-1] と t[i] の大きい方に a を加えた値が result[i] となります。

以下が、C++プログラムです。

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

int main()
{
	int n, a;
	cin >> n >> a;
	vector<int> t(n);
	for (int i = 0; i < n; ++i) {
		cin >> t[i];
	}

	vector<int> result(n);
	result[0] = t[0] + a;
	for (int i = 1; i < n; ++i) {
		result[i] = max(t[i], result[i - 1]) + a;
	}

	for (int i = 0; i < n; ++i) {
		cout << result[i] << endl;
	}

	return 0;
}

AC(Accepted=正しいプログラム)と判定されました。

Python プログラム例(ABC358B)

Python版も基本的な考え方は同じです。以下がプログラムです。

"""AtCoder Beginner Contest 358 B"""
n, a = map(int, input().split())
t = list(map(int, input().split()))

result = [0] * n
result[0] = t[0] + a
for i in range(1, n):
    result[i] = max(t[i], result[i - 1]) + a

for e in result:
    print(e)

こちらも「AC」と判定されました。

最後に

このような問題は、速く解きたいものです。

引き続き ABC の問題を紹介していきます。

COMMENT

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

CAPTCHA