ARC120 Swap2[python]
URL
구속
2<= N<= 2*10^{5}
0<= A[i],B[i] <=10^{9}
입력한 값은 모두 정수입니다.
문제 개요
코드 커밋
from collections import defaultdict
n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
a_ = [i+a[i] for i in range(n)]
b_ = [i+b[i] for i in range(n)]
if set(a_) != set(b_):
print(-1)
exit()
dict_b = defaultdict(list)
c = [0]*n
for i in range(n):
dict_b[b_[i]].append(i)
# print(dict_b)
a_count = {} # a の要素に対して何回出てきたか
for i in range(n):
if a_[i] in a_count:
a_count[a_[i]] += 1
else:
a_count[a_[i]] = 0
#print(dict_b[a_[i]], a_count[a_[i]])
c[i] = dict_b[a_[i]][a_count[a_[i]]]
# c に関して転倒数の計算
def mergecount(A):
cnt = 0
n = len(A)
if n > 1:
A1 = A[:n >> 1]
A2 = A[n >> 1:]
cnt += mergecount(A1)
cnt += mergecount(A2)
i1 = 0
i2 = 0
for i in range(n):
if i2 == len(A2):
A[i] = A1[i1]
i1 += 1
elif i1 == len(A1):
A[i] = A2[i2]
i2 += 1
elif A1[i1] <= A2[i2]:
A[i] = A1[i1]
i1 += 1
else:
A[i] = A2[i2]
i2 += 1
cnt += n//2 - i1
return cnt
print(mergecount(c))
고찰하다.
설명 AC
실시 방침
다음의 반성
참고 자료
공식 해설https://atcoder.jp/contests/arc120/editorial/1921
밑으로 떨어지는 알고리즘https://kira000.hatenadiary.jp/entry/2019/02/23/053917
python 사전에 목록을 입력하십시오 https://www.haya-programming.com/entry/2018/04/24/002524
여기서 카운트다운 라이브러리 빌리기https://nagiss.hateblo.jp/entry/2019/07/01/185421
Reference
이 문제에 관하여(ARC120 Swap2[python]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/knk_kei/articles/arc120-swap2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)