| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1 초 | 1024 MB | 198 | 14 | 10 | 10.417% |
이 문제는 인터랙티브 문제입니다.
서울과학고에는 1ドル$번부터 $N$번까지 번호가 붙여진 $N$개의 교실이 있고, 각 교실에는 각각 1ドル$번부터 $K$번까지 번호가 붙여진 $K$명의 학생들이 순서대로 원형으로 둘러앉아 학급 회의를 진행하고 있다. 즉, $i$번 학생과 $i+1$번 학생이 인접하게 앉아 있으며 (1ドル \le i \le K-1$), $K$번 학생과 1ドル$번 학생도 인접하게 앉아 있다. 각 교실마다 $K$명의 학생 중 정확히 한 명의 학급 회장이 있다.
서울과학고의 교장 선생님께서 각 학급의 회장들만 불러모아 대의원 회의를 열고자 한다. 그런데 교장 선생님은 각 학급 회장의 번호를 모르기 때문에 다음과 같은 과정을 통해 모든 학생회장의 번호를 알아내기로 했다.
예컨대 교실의 수 $N = 2$ 이고, 각 교실에는 $K = 10$명의 학생들이 있다고 하자. 1ドル$번 교실의 학급 회장은 1ドル$번 학생, 2ドル$번 교실의 학급 회장은 5ドル$번 학생이라고 생각하자. 교장 선생님이 1ドル$번 교실에서 7ドル$번 학생을, 2ドル$번 교실에서 10ドル$번 학생을 호출한 경우 첫 번째 학급에서 학급 회장과 호출한 학생 사이 거리는 4ドル$이고, 두 번째 학급에서 학급 회장과 호출한 학생 사이 거리는 5ドル$이므로, 교장 선생님은 거리의 총합인 9ドル$를 되돌려받게 된다.
이제 교장 선생님을 대신해 위 호출을 이용해 각 교실의 학급 회장의 번호를 알아내는 프로그램을 작성해 보자.
당신의 프로그램은 아래의 과정을 통해 표준 입출력으로 인터랙터와 상호작용해야 한다.
먼저, 입력의 첫 번째 줄에 반의 개수 $N$과 반별 학생 명수 $K$가 공백으로 구분되어 주어진다.
이후, 아래 쿼리를 출력하면 호출된 결과인 학생들의 학급 회장 학생과의 거리 합을 얻을 수 있다. 이 쿼리는 최대 2ドル,000円$번 사용할 수 있다. 쿼리를 출력한 후 출력 버퍼를 비워야 한다.
? a[1] a[2] a[3] ... a[N]
$a[i]$는 $i$번 교실에서 호출할 학생의 번호를 의미한다. 여기서 모든 $i$에 대해 1ドル \le a[i] \le K$여야 한다. $(1 \le i \le N)$
모든 학급 회장의 번호를 알아냈다면, 아래 쿼리를 출력하여 각 교실의 학급 회장의 번호를 출력하고, 프로그램을 즉시 종료해야 한다.
! b[1] b[2] b[3] ... b[N]
$b[i]$는 $i$번 교실의 학급 회장 번호를 의미한다. 여기서 모든 $i$에 대해 1ドル \le b[i] \le K$여야 한다. $(1 \le i \le N)$
인터랙터는 적응적이지 않다. 즉, 학급 회장의 번호는 실행 중간에 변화하지 않는다.
서브태스크 2에서는 사용한 쿼리의 수 $Q$에 따라 부분 점수를 얻을 수 있다. $Q$에 따라 얻을 수 있는 서브태스크 2의 점수는 다음과 같다.
2 10 9 0
? 7 10 ? 1 5 ! 1 5
예제는 이해를 돕기 위해 개행 간격을 의도적으로 조절한 것으로, 실제 입출력에서는 빈 줄을 입력받거나 출력하지 않아야 한다.
출력 버퍼를 비우는 방법은 다음과 같다.
fflush(stdout)std::cout << std::flushSystem.out.flush()sys.stdout.flush()이외의 언어에 대해서는 언어별 명세를 참고해야 한다.
School > 서울과학고등학교 > SciOI 2024 F번