시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 512 MB177373323.404%

문제

오늘도 서준이는 선택 알고리즘 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.

N개의 서로 다른 양의 정수가 규칙 없이 저장된 배열 A가 있다. 평균 선형 시간 선택 알고리즘으로 배열 A에서 번째 작은 원소를 찾는 경우 원소를 찾는 과정에서 배열 A가 배열 B와 같은 경우가 발생하는지 확인해 보자. 초기 상태 배열 A도 찾는 과정에서 발생 가능한 경우로 생각하자.

크기가 N인 배열에 대한 평균 선형 시간 선택 알고리즘 의사 코드는 다음과 같다.

select(A[], p, r, q) { # A[p..r]에서 q번째 작은 원소를 찾는다.
    if (p = r) then return A[p];
    t <- partition(A, p, r);  # 분할
    k <- t - p + 1;           # 기준원소가 전체에서 k번째 작은 원소임
    if (q < k) then return select(A, p, t - 1, q);  # 왼쪽 그룹으로 범위를 좁힘
    else if (q = k) then return A[t];               # 기준원소가 찾는 원소임
    else return select(A, t + 1, r, q - k);         # 오른쪽 그룹으로 범위를 좁힘
}

partition(A[], p, r) {
    x <- A[r];    # 기준원소
    i <- p - 1;   # i는 x보다 작거나 같은 원소들의 끝 지점
    for j <- p to r - 1  # j는 아직 정해지지 않은 원소들의 시작 지점
        if (A[j] ≤ x) then A[++i] <-> A[j]; # i값 증가 후 A[i] <-> A[j] 교환
    if (i + 1 ≠ r) then A[i + 1] <-> A[r];  # i + 1과 r이 서로 다르면 A[i + 1]과 A[r]을 교환
    return i + 1;
}

입력

첫째 줄에 배열 A, B의 크기 N(5 ≤ N ≤ 10,000), 찾을 원소 정보 Q(1 ≤ Q ≤ N)가 주어진다.

다음 줄에 서로 다른 배열 A의 원소 A1, A2, ... , AN이 주어진다. (1 ≤ Ai ≤ 109)

다음 줄에 서로 다른 배열 B의 원소 B1, B2, ... , BN이 주어진다. (1 ≤ Bi ≤ 109)

출력

평균 선형 시간 선택 알고리즘으로 배열 A에서 번째 작은 원소를 찾는 과정에서 배열 A가 배열 B와 같은 경우가 발생하면 1, 아니면 0을 출력한다.

예제 입력 1

5 3
2 5 1 4 3
2 1 5 4 3

예제 출력 1

1

2 5 1 4 3(i=0, j=1, A[1]과 A[1]이 교환됨) -> 2 5 1 4 3(i=1, j=2) -> 2 5 1 4 3(i=1, j=3, A[2]와 A[3]이 교환됨) -> 2 1 5 4 3(i=2, j=4) -> 2 1 5 4 3(i=2, r=5, A[3]과 A[5]가 교환됨) -> 2 1 3 4 5. 총 3회 교환이 발생하고 두 번째 교환 직후 배열 A의 모습은 2 1 5 4 3이다.

예제 입력 2

5 3
2 5 1 4 3
1 2 3 4 5

예제 출력 2

0

총 3회 교환이 발생하고 세 번째 작은 원소를 찾는 과정에서 1 2 3 4 5가 되는 경우는 없다.

출처