AtCoder が提供しているABC(AtCoder Beginner Contest)370 B問題をC++とPythonで解いてみました。ABC370は、2024年9月7日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
B問題 Binary Alchemy(Difficulty : 84)
問題の詳細は、リンク先をご覧ください。
問題の指示に従い次の要素を求めます。AtCoder Problems による Difficulty は 84 でした。
解答案
C++ プログラム例(ABC370B)
与えられた配列を用いて、次の元素を求めます。問題文の元素は1からカウントしていますが、配列は0からカウントします。このため、1を引いて次の元素を求める必要があります(18、20行目)。
以下が、C++プログラムです。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
vector<vector<int>> a(n, vector<int>(n, 0));
for (int i = 0; i < n; ++i) {
for (int j = 0; j <= i; ++j) {
cin >> a[i][j];
}
}
int result = 1;
for (int i = 1; i <= n; ++i) {
if (result >= i) {
result = a[result - 1][i - 1];
} else {
result = a[i - 1][result - 1];
}
}
cout << result << endl;
return 0;
}
AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC370B)
Python版も基本的な考え方は同じです。以下がプログラムです。
"""AtCoder Beginner Contest 370 B"""
n = int(input())
a = [[] for _ in range(n)]
for i in range(n):
a[i] = list(map(int, input().split()))
result = 1
for i in range(1, n + 1):
if result >= i:
result = a[result - 1][i - 1]
else:
result = a[i - 1][result - 1]
print(result)
こちらも「AC」と判定されました。
最後に
問題文の多くは1からカウントしています。一方、計算機では通常、0からカウントするため、1個違いのミスを起こさないよう注意が必要です。
引き続き ABC の問題を紹介していきます。