AtCoder が提供しているABC(AtCoder Beginner Contest)317 のA問題をC++とPythonで解いてみました。ABC317は、2023年8月26日21:00に実施されました。
ABC316は欠番になりました。AtCoderからのお知らせはこちらです。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
A問題 Potions(Difficulty : 14)
問題はリンク先をご覧ください。
問題に与えられた数列から条件を満たす最初の数値を求める問題です。AtCoder Problems による Difficulty は 14 でした。
解答案
C++ プログラム例(ABC317A)
数値 $n$、$h$、$x$ と数列 $p$ を読み込みます(変数名は、C/C++の慣用に従い英小文字にしています)。読み込んだ数列の先頭から、$h + p_i \geqq x$ となる $p_i$ があれば、インデックスである $i + 1$ を出力します(15行目)。
インデックスに1を加えているのは、問題の数列は、1からカウントしていて、C/C++の配列の添え字は、0からカウントするためです。
以下が、C++プログラムとなります。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, h, x;
cin >> n >> h >> x;
vector<int> p(n);
for (int i = 0; i < n; ++i) {
cin >> p[i];
}
for (int i = 0; i < n; ++i) {
if (h + p[i] >= x) {
cout << i + 1 << endl;
break;
}
}
return 0;
}
AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC317A)
Python 版も基本的な考え方は同じです。以下となります。
"""AtCoder Beginner Contest 317 A"""
n, h, x = map(int, input().split())
p = list(map(int, input().split()))
for i in range(n):
if h + p[i] >= x:
print(i + 1)
break
こちらも「AC」と判定されました。
最後に
今回のABCは、ポケモンを開発しているゲームフリークが主催でした。AtCoderの特典は、就職をする学生向けがほとんどでした。しかし、今回は「各1枚限定!AtCoderコンテスト限定ポストカード(全151種類)」が特典でした。初めて特典が受けれるように参加者登録しました。
対象の条件のひとつに「1問以上正解していること」がありました。特典目当ての方も、この問題であれば、ネットで調べながらでも解けたかもしれません。
引き続き ABC の問題を紹介していきます。