문제
회원들이 길을 건너는 이유는 무엇일까? 그 정확한 이유는 알 수 없지만, 우솔이가 운영하는 알고리즘 동아리 회원들이 길을 매우 자주 건너는 것만은 확실하다. 회원들이 길을 너무 자주 건너다 보니 서로의 경로가 겹쳐 부딪히는 일이 빈번하게 발생했고, 우솔이는 이를 해결하기로 했다.
우솔이는 부터 까지의 번호가 매겨진 개의 서로 다른 소속을 관리한다 (). 길의 양옆에는 각각 개의 구역이 일렬로 늘어서 있으며, 각 구역은 특정 소속 회원들만 사용하도록 지정되어 있다. 예를 들어 소속 를 위한 구역에는 소속 인 회원만 들어갈 수 있다. 한 회원이 길을 건널 때는 자신의 소속이 지정된 길 반대편의 구역으로 이동한다.
우솔이가 좀 더 신중하게 계획했다면 길 양쪽의 구역들을 소속 번호순으로 똑같이 배치했을 것이다. 그랬다면 같은 소속의 두 구역이 서로 마주 보고 있어, 회원들이 길을 건널 때 다른 소속 회원과 부딪히는 일이 없었을 것이다. 하지만 현재 길 양쪽의 구역 배치는 서로 다를 수 있으며, 이로 인해 경로가 서로 교차하는 소속 쌍이 발생할 수 있다. 서로 다른 두 소속 에 대하여, 소속 의 이동 경로와 소속 의 이동 경로가 반드시 교차해야 하는 경우를 "교차하는 쌍"이라고 정의한다.
우솔이는 교차하는 쌍의 개수를 최소화하고 싶어 한다. 우솔이는 운영상의 이유로 길 한쪽의 구역들을 통째로 "순환 이동(cyclic shift)"시킬 수 있다. 즉, 어떤 에 대해, 모든 구역을 앞으로 칸씩 이동시키고, 뒤로 밀려난 개의 구역은 다시 앞에서부터 채우는 방식이다. 예를 들어, 한쪽 길의 구역 배치가 소속 번호 기준 이었을 때 만큼 순환 이동하면 가 된다.
한쪽 길의 구역 배치를 적절히 순환 이동시켰을 때, 발생할 수 있는 교차하는 쌍의 최소 개수를 구하시오.
입력
첫째 줄에 이 주어진다. ($1 \le N
이어서 개의 줄에는 길 한편에 있는 구역들의 소속 ID가 위에서 아래로 순서대로 주어진다. 각 ID는 이상 이하의 정수이며, 모든 ID는 서로 다르다.
그 다음 개의 줄에는 길 반대편에 있는 구역들의 소속 ID가 위에서 아래로 순서대로 주어진다. 마찬가지로 각 ID는 이상 이하의 정수이며, 모든 ID는 서로 다르다.
출력
한쪽 길의 구역들을 적절히 순환 이동했을 때(어느 쪽 길을 선택해도 무방하다), 교차하는 쌍의 개수의 최솟값을 출력한다.
예제 입력 1
5
5
4
1
3
2
1
3
2
5
4
예제 출력 1
0
코드를 제출하려면 로그인이 필요합니다.
로그인