빌보의 생일

시간 제한3초메모리 제한256 MB

요약
같은 이름 N개에 대한 두 순열이 주어질 때, 프로도의 차트와 순서가 다른 쌍의 수와 샘의 차트와 순서가 다른 쌍의 수의 합이 최소가 되는 최종 순서를 찾는다.
난이도

보통10점 중 7점

유형
정렬, 분할 정복, 조합론, 그리디
정답자
아직 제출이 없습니다

문제

프로도와 샘은 곧 열릴 빌보의 111번째 생일 파티를 준비하고 있다. 두 사람은 중간계의 모든 호빗을 초대했고, 한 명도 빠짐없이 모두 참석하기로 했다. 호빗들은 아주 긴 식탁 하나에 한 줄로 나란히 앉는다.

프로도와 샘은 서로 상의하지 않고 각자 좌석 배치표를 하나씩 따로 만들었다. 이제 두 사람은 이 두 배치표를 참고하여 최종 좌석 배치표 하나를 만들려고 한다.

임의의 두 호빗 xx, yy에 대해, 한 배치표에서 xx가 yy보다 앞에 앉는지 뒤에 앉는지를 그 배치표에서 두 호빗의 상대적 순서라고 하자. 최종 배치표에서의 상대적 순서가 프로도의 배치표에서의 순서와 다르면 어긋난 것을 하나 세고, 샘의 배치표에서의 순서와 다르면 또 하나를 센다. 즉, 각 호빗 쌍마다 최종 배치표를 프로도와 샘 각각의 배치표와 비교하여 순서가 다른 경우의 수를 모두 더한다.

최종 배치표를 잘 정하여 이렇게 어긋난 경우의 총합을 최소로 만들려고 한다. 그 최솟값을 구하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫째 줄에는 호빗의 수를 나타내는 정수 NN (1≤N≤100 0001 \le N \le 100\,000)이 주어진다. 이어지는 두 줄은 각각 프로도의 좌석 배치표와 샘의 좌석 배치표이며, 한 줄에 서로 다른 NN개의 이름이 공백으로 구분되어 주어진다. 각 이름은 알파벳 문자로만 이루어지고 길이는 최대 66이다. 두 배치표에 등장하는 이름의 집합은 서로 같다. 입력의 마지막 줄에는 00이 주어지며, 이 줄은 처리하지 않는다.

출력

각 테스트 케이스마다 어긋난 경우의 최솟값을 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    3
    Frodo Sam Bilbo
    Sam Frodo Bilbo
    5
    A B C D E
    B A D E C
    0
    
    예상 출력
    1
    3