최댓값 찾기

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

요약
주어진 t에 대해 절댓값 차의 합을 돌려주는 기계를 20번 이내로 질문해 숨은 N개 정수 중 최댓값을 찾는다.
난이도

보통10점 중 7점

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

문제

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

태윤이는 NN개의 정수 x_1,x_2,...,x_Nx\_1, x\_2,...,x\_N(1≤x_i≤100,0001 \leq x\_i \leq 100\\,000)에 대해 가장 큰 수가 무엇인지 궁금해졌다. 그러나, 모든 수를 전부 보기에는 시간이 오래 걸릴 것 같았기 때문에 신기한 기계를 이용하여 답을 찾고자 한다.

이 기계는 11부터 100,000100\\,000사이의 정수 tt를 입력하면 11부터 NN까지의 모든 ii에 대해서 ∣x_i−t∣\vert x\_i - t \vert값의 총합을 반환한다. 다만, 기계가 불완전하기 때문에 2020번을 넘게 질문하면 터져버린다.

태윤이를 도와 가장 큰 수를 찾아주자.

입력

첫 번째 줄에 수의 개수 NN이 주어진다. (1≤N≤100,0001 \leq N \leq 100\\,000)

출력

기계에는 최대 2020번까지 질문할 수 있으며 이를 초과할 경우 오답 처리된다.

  • ? tt: 기계에 tt를 입력한다. 기계는 ∑_i=1N∣x_i−t∣\sum\_{i=1}^{N}{\vert x\_i-t \vert}을 반환한다. (1≤t≤100,0001 \leq t \leq 100\\,000)
  • ! tt: NN개의 수 중 가장 큰 수를 찾아 출력한다. 이는 기계의 질문 횟수에 포함되지 않으며, 출력 후 바로 프로그램을 종료하여야 한다.

각 인터랙션 이후에는 반드시 표준 출력 버퍼를 flush 해 주어야 한다.

언어별로 표준 출력 버퍼를 flush하는 방법은 다음과 같다.

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

채점 시스템은 적응적이지 않다. 즉, 처음에 x_1,x_2,...,x_Nx\_1, x\_2,...,x\_N은 정해져 있으며 상호작용 도중에 바뀌지 않는다.

예제1

  1. 예제 1

    입력
    5
    
    4
    
    1
    
    
    예상 출력
    
    ? 1
    
    ? 2
    
    ! 2