AtCoder

ABC304 A問題(First Player)を解く

AtCoder_ABC304_A

AtCoder が提供しているABC(AtCoder Beginner Contest)304 のA問題をC++とPythonで解いてみました。ABC304は、2023年6月3日21:00に実施されました。

この回は、サーバ攻撃を受けてジャッジ遅れが大きく発生したため、unrated となりました。

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

A問題 First Player

問題はリンク先をご覧ください。

ABC304 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 となりました。コンテスト途中からジャッジ待ちが長くなりました。

運営の方も工夫されて対応されているかと思います。効果的な対策ができるよう願っています。

ABC304 について、引き続き問題を紹介していきます。

COMMENT

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

CAPTCHA