생성기
시간 제한1초메모리 제한256 MB
각 생성기의 도달 가능한 최댓값을 구한 뒤 k로 나누어떨어지지 않도록 손실이 가장 작은 값 하나를 낮춰 합을 구합니다.
문제
선형 합동 생성기(LCG)는 음이 아닌 정수 을 시드로 삼아 시작하고, 를 만족하는 정수 수열 를 무한히 만든다.
, , 는 음이 아닌 정수이고 이다.
생성기 개가 주어진다. 번 생성기의 매개변수는 , , , 이고, 이 생성기는 수열 를 만든다. 수열 개에서 항을 하나씩 골라, 고른 항의 합을 최대로 하면서 그 합이 의 배수가 되지 않게 하려고 한다.
식으로 쓰면 에 대해 정수 을 골라, 이라는 조건 아래에서 를 최대로 만드는 것이다.
입력
첫째 줄에 정수 과 가 주어진다 (, ).
다음 개 줄에는 생성기 하나를 나타내는 정수 네 개 , , , 가 주어진다 (, ).
출력
의 배수가 아닌 합을 만들 수 없으면 첫째 줄에 -1을 출력한다.
만들 수 있으면 첫째 줄에 최대 합 를 출력하고, 둘째 줄에 인덱스 을 공백 하나로 구분해 출력한다 ().
같은 최대 합을 만드는 인덱스 조합이 여러 가지일 수 있으므로, 다음 규칙이 정하는 조합을 그대로 출력한다. 번 수열에 나타나는 값 중 가장 큰 값을 라 하고, 이라 하자.
- 이면 이고, 모든 생성기가 자기 수열의 최댓값 를 고른다.
- 그렇지 않으면 각 생성기 에 대해, 번 수열에 나타나면서 을 만족하는 값 중 가장 큰 것을 라 하고 라 하자. 그런 가 없는 생성기는 이 단계에서 제외한다. 그런 가 있는 생성기가 하나도 없으면 -1을 출력한다. 있으면 의 최솟값을 , 인 가장 작은 번호를 라 할 때 이고, 번 생성기는 를 고르며 나머지 생성기는 모두 자기 수열의 최댓값 를 고른다.
각 생성기에 대해, 고른 값이 그 수열에서 처음 나타나는 인덱스 를 출력한다.
참고
첫 번째 예제에서 첫 생성기는 1, 2, 3, 4, 5, 0, 1, 2, ...를 만들고, 둘째 생성기는 2, 3, 2, 3, 2, ...를 만든다.
두 번째 예제에서 첫 생성기는 0, 2, 0, 2, 0, ...을 만들고, 둘째 생성기는 2, 4, 2, 4, 2, ...를 만든다.