AtCoder が提供しているABC(AtCoder Beginner Contest)358 B問題をC++とPythonで解いてみました。ABC358は、2024年6月15日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
B問題 Ticket Counter(Difficulty : 43)
問題の詳細は、リンク先をご覧ください。
チケット購入を待つのか、すぐに処理するのかで場合分けします。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 の問題を紹介していきます。