가스탱크로 한 바퀴

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

요약
한 바퀴를 정확히 돌 만큼의 연료가 원형 도로 위 주유소에 나뉘어 있을 때, 한 바퀴를 완주할 수 있는 출발 주유소와 방향을 모두 찾는다.
난이도

보통10점 중 6점

유형
누적 합, 그리디, 시뮬레이션
정답자
아직 제출이 없습니다

문제

필요한 만큼 얼마든지 담을 수 있을 만큼 아주 큰 연료 탱크를 가진 자동차가 있다고 하자. 이 자동차는 여러 주유소가 놓인 원형 도로를 달린다. 모든 주유소에 있는 연료를 합치면 원형 도로를 정확히 한 바퀴 도는 데 필요한 양과 같다. 주유소에 도착할 때마다 그 주유소의 연료를 모두 탱크에 넣는다.

빈 탱크로 출발할 때, 한 바퀴를 완주해 출발점으로 돌아올 수 있는 주유소와 방향(시계 방향 또는 반시계 방향)이 항상 적어도 하나는 존재한다.

원형 도로의 길이, 주유소들의 위치, 그리고 각 주유소의 연료로 달릴 수 있는 거리가 주어질 때, 한 바퀴를 완주할 수 있는 모든 (주유소, 방향)을 구하라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 두 양의 정수 cc와 ss가 주어진다. cc는 원형 도로의 전체 둘레(마일)이고, ss는 주유소의 개수이다.

이어서 주유소를 나타내는 ss개의 정수 쌍 tt와 mm이 주어진다. tt(0≤t≤c−10 \le t \le c-1)는 원 위의 고정된 기준점에서 시계 방향으로 잰 주유소의 위치이고, mm은 그 주유소의 연료를 모두 사용해 달릴 수 있는 마일 수이다. 모든 주유소의 위치는 서로 다르며 c≤100000c \le 100000이다.

한 테스트 케이스에서 모든 mm의 합은 cc와 같다.

테스트 케이스 목록은 두 개의 0이 적힌 줄로 끝난다.

출력

각 테스트 케이스마다 Case X:를 출력한다. 여기서 XX는 1부터 시작하는 테스트 케이스 번호이다. 그 뒤에 한 바퀴를 완주할 수 있는 각 주유소에 대해 쌍 i d를 이어서 출력한다. ii는 주유소의 위치이고 dd는 다음과 같다.

  • 시계 방향으로만 완주할 수 있으면 C
  • 반시계 방향으로만 완주할 수 있으면 CC
  • 양쪽 방향 모두 완주할 수 있으면 CCC

완주할 수 있는 주유소들을 위치가 증가하는 순서로, 공백으로 구분하여 나열한다.

예제1

  1. 예제 1

    입력
    10 4
    2 3 4 3 6 1 9 3
    5 5
    0 1 4 1 2 1 3 1 1 1
    0 0
    
    예상 출력
    Case 1: 2 C 4 CC 9 C
    Case 2: 0 CCC 1 CCC 2 CCC 3 CCC 4 CCC