AtCoder

ABC392 C問題(Bib)を解く

AtCoder_ABC392_C

AtCoder が提供しているABC(AtCoder Beginner Contest)392 C問題をC++とPythonで解いてみました。ABC392は、2025年2月8日21:00に実施されました。

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

C問題 Bib(Difficulty : 132)

問題の詳細は、リンク先をご覧ください。

ABC392 C問題 Bib

3つの配列を準備して処理します。AtCoder Problems による Difficulty は 132 でした。

解答案

C++ プログラム例(ABC392C) 

配列 p に人の番号→見つめている人の番号を、配列 q に人の番号→付けているゼッケンの番号を、配列 rq にゼッケンの番号→人の番号を格納します。

出力する値は、q[p[rq[i]]] となります。なおインデックスは1からカウントします。

以下が、C++プログラムです。

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int n;
	cin >> n;
	vector<int> p(n + 1);
	for (int i = 1; i <= n; ++i) {
		cin >> p[i];
	}
	vector<int> q(n + 1);
	vector<int> rq(n + 1);
	for (int i = 1; i <= n; ++i) {
		int t;
		cin >> t;
		q[i] = t;
		rq[t] = i;
	}

	for (int i = 1; i <= n; ++i) {
		cout << q[p[rq[i]]] << " \n"[i == n];
	}

	return 0;
}

AC(Accepted=正しいプログラム)と判定されました。

Python プログラム例(ABC392C)

Python版も基本的な考え方は同じです。以下がプログラムです。

"""AtCoder Beginner Contest 393 C"""
n = int(input())
tp = list(map(int, input().split()))
tq = list(map(int, input().split()))

p = [0] * (n + 1)
q = [0] * (n + 1)
rq = [0] * (n + 1)
for i in range(1, n + 1):
    p[i] = tp[i - 1]
    q[i] = tq[i - 1]
    rq[tq[i - 1]] = i

result = []
for i in range(1, n + 1):
    result.append(q[p[rq[i]]])

print(*result)

こちらも「AC」と判定されました。

最後に

配列のインデックスは0からカウントしますが、この問題は1個違いミスを避けるため、1からカウントできるよう要素を1個余分に確保して処理しました。

引き続き ABC の問題を紹介していきます。

COMMENT

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

CAPTCHA