AtCoder が提供しているABC(AtCoder Beginner Contest)304 のA問題をC++とPythonで解いてみました。ABC304は、2023年6月3日21:00に実施されました。
この回は、サーバ攻撃を受けてジャッジ遅れが大きく発生したため、unrated となりました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
A問題 First Player
問題はリンク先をご覧ください。
名前と年齢の組が与えられて、一番若い人から名前を出力する問題です。AtCoder Problems による Difficulty は算出されていません。A問題としては、少し難しい難易度だと思います。
解答案
C++ プログラム例(ABC304A)
N 人の名前と年齢の組が与えられます。年齢が一番若い人を特定して、その人を起点に名前を出力します。
配列の添え字を 0 から始めれば、N で余りを取ることにより、問題の条件を満たすように名前を出力することができます(24行目)。
以下が、C++プログラムとなります。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
vector<string> s(n);
vector<int> a(n);
for (int i = 0; i < n; ++i) {
cin >> s[i] >> a[i];
}
int minA = 1000000001;
int min_index = -1;
for (int i = 0; i < n; ++i) {
if (a[i] < minA) {
minA = a[i];
min_index = i;
}
}
for (int i = 0; i < n; ++i) {
cout << s[(min_index + i)% n] << endl;
}
return 0;
}
AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC304A)
Python 版は、C++ のプログラムをそのまま移植しました。
"""AtCoder Beginner Contest 304 A"""
n = int(input())
s = []
a = []
for i in range(n):
ts, ta = input().split()
s.append(ts)
a.append(int(ta))
minA = 10 ** 9 + 1
min_index = -1
for i in range(n):
if a[i] < minA:
minA = a[i]
min_index = i
for i in range(n):
print(s[(min_index + i) % n])
こちらも「AC」と判定されました。
最後に
ABC298、ABC299 から少し空きましたが、ABC304 もサーバ攻撃の影響で unrated となりました。コンテスト途中からジャッジ待ちが長くなりました。
運営の方も工夫されて対応されているかと思います。効果的な対策ができるよう願っています。
引き続き ABC の問題を紹介していきます。