エイシングプログラミングコンテスト2021 C - Made Up【Python解答例】
エイシングプログラミングコンテスト2021(AtCoder Beginner Contest202)のC問題についてPythonの解答例を記事にしていきます。
AISing Programming Contest 2021(AtCoder Beginner Contest 202) - AtCoder
AtCoder Beginner Contest202 C - Made Up
問題文
1 以上 N 以下の整数からなる長さ N の数列 A=(A1,A2,…,AN),B=(B1,B2,…,BN),C=(C1,C2,…,CN) が与えられます。
1 以上 N 以下の整数 i , j の組 ( i , j ) であって、Ai=BCj となるものの総数を求めてください。
制約
・1≤N≤10^5
・1≤Ai,Bi,Ci≤N
・入力は全て整数である。
解答例
import collections n = int(input()) A = list(map(int, input().split())) B = list(map(int, input().split())) C = list(map(int, input().split())) Bcj = [] for j in range(n): tmp = B[C[j] - 1] Bcj.append(tmp) a = collections.Counter(A) ans = 0 for i in range(len(BCj)): ans += a[BCj[i]] print(ans)
解説
長さNの3つの数列があり、Ai = Bcjとなる( i , j )の数を求める問題です。
次にAiの各 値の出現回数をcollections.Counterを用いてaにまとめておきます。
後はBcjの値毎にaを参照して出現回数を調べて、ans変数に足しあわせました。
ループを抜けたあとのans変数には求める値が代入されていますので出力すればOKでした。
ABC202の関連記事はこちら
ebisuke33.hatenablog.com