회장 호출하기

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

요약
K명이 원형으로 앉은 N개 교실에서 각 교실마다 한 명씩 호출하고, 돌려받은 원형 거리의 총합을 이용해 각 반 회장의 번호를 알아내는 인터랙티브 문제이다.
난이도

보통10점 중 7점

유형
이분 탐색, 수학, 구현
정답자
아직 제출이 없습니다

문제

이 문제는 인터랙티브 문제입니다.

서울과학고에는 11번부터 NN번까지 번호가 붙여진 NN개의 교실이 있고, 각 교실에는 각각 11번부터 KK번까지 번호가 붙여진 KK명의 학생들이 순서대로 원형으로 둘러앉아 학급 회의를 진행하고 있다. 즉, ii번 학생과 i+1i+1번 학생이 인접하게 앉아 있으며 (1≤i≤K−11 \le i \le K-1), KK번 학생과 11번 학생도 인접하게 앉아 있다. 각 교실마다 KK명의 학생 중 정확히 한 명의 학급 회장이 있다.

서울과학고의 교장 선생님께서 각 학급의 회장들만 불러모아 대의원 회의를 열고자 한다. 그런데 교장 선생님은 각 학급 회장의 번호를 모르기 때문에 다음과 같은 과정을 통해 모든 학생회장의 번호를 알아내기로 했다.

  • NN개의 교실에서 각각 한 명씩, 총 NN명을 호출한다. 이 학생들은 학생 회장이 아니어도 상관없다.
  • 호출이 끝난 뒤, 이 학생들이 교실에 앉아서 회의를 할 때 학급 회장과의 거리의 총합을 알 수 있다. 이때, 각 교실 내에서 학급 회장과 호출된 학생 사이 거리는 학급 회장의 번호가 aa, 호출된 학생의 번호가 bb일 때 min⁡(∣a−b∣,K−∣a−b∣)\min(|a-b|, K-|a-b|)로 정의된다.

예컨대 교실의 수 N=2N = 2 이고, 각 교실에는 K=10K = 10명의 학생들이 있다고 하자. 11번 교실의 학급 회장은 11번 학생, 22번 교실의 학급 회장은 55번 학생이라고 생각하자. 교장 선생님이 11번 교실에서 77번 학생을, 22번 교실에서 1010번 학생을 호출한 경우 첫 번째 학급에서 학급 회장과 호출한 학생 사이 거리는 44이고, 두 번째 학급에서 학급 회장과 호출한 학생 사이 거리는 55이므로, 교장 선생님은 거리의 총합인 99를 되돌려받게 된다.

이제 교장 선생님을 대신해 위 호출을 이용해 각 교실의 학급 회장의 번호를 알아내는 프로그램을 작성해 보자.

제한

  • 2≤N≤5002 \le N \le 500
  • 2≤K≤1052 \le K \le 10^5

힌트

출력 버퍼를 비우는 방법은 다음과 같다.

  • C: fflush(stdout)
  • C++: std::cout << std::flush
  • Java: System.out.flush()
  • Python: sys.stdout.flush()

이외의 언어에 대해서는 언어별 명세를 참고해야 한다.

예제1

  1. 예제 1

    입력
    2 10
    
    9
    
    0
    ​
    
    예상 출력
    
    ? 7 10
    
    ? 1 5
    
    ! 1 5