아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

초콜릿 보물 찾기

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

요약
10x10 격자에 숨겨진 2x1 보물상자를, 각 칸이 보물상자에 포함되는지 묻는 쿼리를 최대 50번 사용해 찾아낸다.
난이도

보통10점 중 7점

유형
이분 탐색, 분할 정복, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

한별이와 함께 어느 해변에 놀러 가기로 한 코코는 해변에 미리 와서 보물찾기 게임을 준비했다. 먼저 모래사장에 10×1010\times 10 크기의 격자를 그린 후, 100100개의 칸 중에서 가로 또는 세로로 이웃한 두 칸을 골라 2×12\times 1 크기의 보물상자를 묻어 놓았다.

보물찾기 게임 준비를 마친 코코는 한별이에게 이런 제안을 했다. “최대 5050칸만 파 보고 보물상자의 위치를 정확히 알아내면 보물상자에 든 초콜릿을 모두 줄게. 보물상자가 있는 두 칸을 모두 파낼 필요는 없고, 두 칸의 좌표만 맞으면 돼.” 과연 한별이는 보물상자의 초콜릿을 얻을 수 있을까?

출력

다음을 한 줄에 출력하여 인터랙터에게 쿼리를 할 수 있다. 쿼리는 최대 5050번까지 할 수 있다.

  • ? r c : r행 c열을 파 본다. 행 번호와 열 번호는 00에서 시작하며, 따라서 올바른 값의 범위는 0≤r,c≤90\le r,c\le 9이다.

각 쿼리의 결과는 한 줄을 입력받아 알 수 있다. 가능한 결과는 다음과 같다.

  • 1 : r행 c열에 보물상자의 일부가 있다.
  • 0 : r행 c열에 보물상자의 일부가 없다.

쿼리를 출력한 후에는 반드시 표준 출력 버퍼를 flush해야 한다.

보물상자의 위치를 알아냈으면 다음과 같이 출력하고 flush한 후 프로그램을 종료해야 한다.

  • ! r1 c1 r2 c2 : 보물상자는 r1행 c1열과 r2행 c2열에 걸쳐 있다. 좌표의 순서는 관계 없다. 보물상자의 위치가 맞으면 맞았습니다, 아니면 틀렸습니다를 받는다.

출력 형식을 지키지 않거나 쿼리를 5050번보다 많이 한 경우에는 예상치 못한 채점 결과를 받을 수 있음에 유의한다.

예제1

  1. 예제 1

    입력
    ㅤ
    1
    
    0
    
    1
    ㅤ
    
    예상 출력
    ? 0 0
    
    ? 0 1
    
    ? 1 0
    
    ! 0 0 1 0