만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

바부시카와 피에로기

시간 제한6초메모리 제한1024 MB

요약
접시마다 현재 피에로기 수와 목표 수가 주어질 때, 교환 한 번의 비용이 |x-y|+C인 상황에서 목표 상태에 도달하는 최소 비용 교환 순서를 구합니다.
난이도

보통10점 중 7점

유형
그리디, 정렬, 배열
정답자
아직 제출이 없습니다

문제

바부시카 바이트미와(Babushka Bajtmiła)가 파티를 연다. 메인 요리는 그녀의 유명한 피에로기다.

파티에는 접시 nn개가 있다. 바부시카는 ii번째 접시에 정확히 pip_i개의 피에로기를 올리려 한다. 모든 pip_i는 서로 다르다. 그녀는 피에로기를 모두 만들어 (p1,…,pn)(p_1, \ldots, p_n)개씩 nn개 접시에 나누어 담았지만, 접시 순서를 뒤섞고 말았다.

바이트미라는 지쳐 있어서 연산 한 종류만 쓸 수 있다. 접시 ii와 jj를 골라 두 접시의 피에로기 수를 서로 바꾼다. 접시 ii에 xx개, 접시 jj에 yy개가 있으면 연산 후 접시 ii에는 yy개, 접시 jj에는 xx개가 놓인다. 이 연산은 ∣x−y∣+C|x-y|+C초가 걸린다. CC초는 적당한 숟가락을 찾는 시간이고, 옮기는 피에로기 하나마다 1초가 더 든다.

파티가 곧 시작된다. 바이트미라는 부엌의 아무것도 건드리지 말라고 했지만, 당신의 알고리즘 실력을 믿는다. 접시의 순서를 원래대로 되돌리는 연산 순서를 가장 짧은 시간에 찾아 보라. 바이트미라를 도와줄 수 있겠는가?

입력

첫 줄에 테스트 케이스 수 zz(1≤z≤10001 \le z \le 1000)가 주어진다. 각 테스트 케이스의 첫 줄에는 nn과 CC가 주어진다(1≤n≤200 0001 \le n \le 200\,000, 1≤C≤1091 \le C \le 10^9). 이어서 nn개 줄에 ii번째 접시의 현재 피에로기 수 aia_i와 목표 개수 pip_i가 주어진다(1≤ai,pi≤1091 \le a_i, p_i \le 10^9).

각 테스트 케이스에서 aia_i는 모두 다르며, 집합 {a1,…,an}\{a_1, \ldots, a_n\}과 {p1,…,pn}\{p_1, \ldots, p_n\}은 같다. 모든 테스트 케이스에 걸친 nn의 합은 1,000,000을 넘지 않는다.

출력

각 테스트 케이스마다 첫 줄에 총 시간 SS와 연산 횟수 KK를 출력한다. 이어서 KK줄을 출력하는데, kk번째 줄에는 두 정수 xkx_k와 yky_k를 쓴다. 이는 kk번째 연산이 접시 xkx_k와 접시 yky_k의 피에로기 수를 서로 바꾼다는 뜻이다. 모든 연산을 마친 뒤 접시 ii에는 정확히 pip_i개의 피에로기가 있어야 한다.

힌트

수열 (2,3,1,4)(2,3,1,4)를 (4,2,1,3)(4,2,1,3)으로 바꿔 보자. 먼저 1번과 2번 접시를 바꾸면 (3,2,1,4)(3,2,1,4)가 되며, 비용은 ∣3−2∣+2=3|3-2|+2=3이다. 다음으로 1번과 4번 접시를 바꾸면 (4,2,1,3)(4,2,1,3)이 되며, 비용은 ∣3−4∣+2=3|3-4|+2=3이다. 총 비용은 6이고, 이것이 최소다.

예제1

  1. 예제 1

    입력
    1
    4 2
    2 4
    3 2
    1 1
    4 3
    
    예상 출력
    6 2
    2 1
    4 1