B - The Honest Woodcutters

回答

  • 一発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