回答
- 一発ACで嬉しかったが、hashmapを使いたくなかったが整理しても方法がわからなかった
N=int(input())
A=list(map(int, input().split()))
B=list(map(int, input().split()))
B_hashmap={i: b for i, b in enumerate(B, start=1)}
cnt=0
for i in range(len(A)):
# print(f"{A[i]}個目の斧は、{i+1}人目が持っている")
# print(f"{i+1}個目の斧は、{B[i]}人目が持っている")
# print("=======")
if (B_hashmap[A[i]]==i+1):
cnt+=1
if (N==cnt):
print("Yes")
else:
print("No")
振り返り
- 女神の配列 B からその斧の持ち主を探すとき、1マスずれるので B[A[i] - 1] と指定 → ここが思い至らなかった。
- 理由はおそらく頭の中で、値がマッピングしきれなくなったから。
true_owner = B[A[i] - 1]のように一旦変数にしてから不要な変数定義を削れば、hashmapなしで解けていたように思う。というよりhashmapもその程度の役割しか果たしてなかった。- 計算量がO(N)であることは変わらないが、ハッシュマップを無駄に作らないほうがメモリ効率が良い。
メモ

問題URL
B - The Honest Woodcutters
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
AtCoder
