AtCoder が提供しているABC(AtCoder Beginner Contest)308 のA問題をC++とPythonで解いてみました。ABC308は、2023年7月1日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
A問題 New Scheme(Difficulty : 16)
問題はリンク先をご覧ください。
与えられた数列が条件を満たすか判定する問題です。AtCoder Problems による Difficulty は 16 でした。
解答案
C++ プログラム例(ABC308A)
ブール変数 result の初期値を true として、以下の条件が成立する場合に result を false とします。これらは、問題に与えられている条件の否定になっています。
- si > si+1 となっている場合(13ー15行目)
- si が100未満か675を超える場合(16ー18行目)
- si が25の倍数でない場合(19ー21行目)
以下が、C++プログラムとなります。
#include <bits/stdc++.h>
using namespace std;
int main()
{
vector<int> s(8);
for (int i = 0; i < 8; ++i) {
cin >> s[i];
}
bool result = true;
for (int i = 0; i < 8; ++i) {
if ((i < 7)&&(s[i] > s[i + 1])) {
result = false;
}
if ((s[i] < 100)||(675 < s[i])) {
result = false;
}
if (s[i] % 25 != 0) {
result = false;
}
}
if (result) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC308A)
Python 版もほぼ同じ実装ですが、2番目の条件は、chained-comparison な書き方をしました(8行目)。この書き方は pylint が推奨しています。
"""AtCoder Beginner Contest 308 A"""
s = list(map(int, input().split()))
result = True
for i in range(8):
if i < 7 and s[i] > s[i + 1]:
result = False
if not 100 <= s[i] <= 675:
result = False
if s[i] % 25 != 0:
result = False
print("Yes" if result else "No")
こちらも「AC」と判定されました。
最後に
この回は、女性(参加資格の表記は「非男性」)に向けたコンテストの予選になっていました(単に ABC としての参加は男性も可)。
プログラミングを楽しむ方は、男性が多いような気がします。このような活動でプログラミングを楽しむ方の多様性が広がることは良いことだと思います。
引き続き ABC の問題を紹介していきます。