아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

세 팔 크레인

시간 제한1초메모리 제한128 MB

요약
p, q, n이 주어질 때, 1번부터 n번 칸을 정확히 한 번씩 채우는 (x, x+p 또는 x+q, x+p+q) 배치 삼중항의 사전순 최소 수열을 구한다.
난이도

어려움10점 중 8점

유형
그리디, 수학, 구현, 조합론
정답자
아직 제출이 없습니다

문제

세 팔 크레인이 컨테이너를 철도 화차에 싣는다. 화차에는 열차 앞쪽부터 1,2,…1, 2, \dots번이 붙어 있고, 화차 한 대에는 컨테이너를 최대 한 개만 올릴 수 있다.

크레인은 두 상수 p≥1p \ge 1, q≥1q \ge 1로 정해진다. 크레인은 한 번 움직일 때마다 창고에서 컨테이너 세 개를 가져와 ii번, i+pi+p번, i+p+qi+p+q번 화차에 올리거나, ii번, i+qi+q번, i+p+qi+p+q번 화차에 올린다.

열차의 화차는 모두 n+p+qn+p+q대이고, 크레인은 앞쪽 nn대를 채워야 한다. 크레인 프로그램은 명령을 나열한 것이고, 명령 하나가 크레인의 움직임 한 번을 뜻한다. 명령은 1≤x<y<z≤n+p+q1 \le x < y < z \le n+p+q를 만족하는 세 수 (x,y,z)(x, y, z)이며, x≤nx \le n이고 yy는 x+px+p 또는 x+qx+q, z=x+p+qz = x+p+q이다. 프로그램을 실행한 뒤 앞쪽 nn대에 컨테이너가 정확히 하나씩 놓여 있으면 그 프로그램은 올바르다. nn번보다 뒤에 있는 화차는 비어 있어도 되고 컨테이너가 한 개 놓여 있어도 된다.

입력

첫째 줄에 크레인의 매개변수 pp, qq와 채워야 하는 앞쪽 화차의 대수 nn이 공백 한 칸으로 구분되어 주어진다. 세 수는 모두 양의 정수이고, 1≤n≤300 0001 \le n \le 300\,000, 2≤p+q≤60 0002 \le p + q \le 60\,000을 만족한다.

출력

올바른 프로그램 하나의 명령을 xx가 커지는 순서로 출력한다. 화차 한 대에는 컨테이너를 한 개만 올리므로 한 프로그램 안에서 두 명령의 xx는 서로 다르고, 이 순서는 유일하다.

올바른 프로그램은 여러 개일 수 있다. 이 순서로 적은 수열 x1,y1,z1,x2,y2,z2,…x_1, y_1, z_1, x_2, y_2, z_2, \dots을 사전순으로 비교해서 가장 앞서는 프로그램을 출력한다.

첫째 줄에 명령의 개수 mm을 출력한다. 다음 mm개 줄에는 명령마다 세 정수 xx, yy, zz를 공백 한 칸으로 구분해 출력한다. 주어진 범위에서 올바른 프로그램은 항상 존재한다.

예제1

  1. 예제 1

    입력
    2 3 10
    
    예상 출력
    4
    1 3 6
    2 4 7
    5 8 10
    9 11 14