Tìm cực tiểu địa phương

Đề bài

Mô tả

Đây là bài toán tương tác.

Hệ thống giữ bí mật một hoán vị a1,a2,…,an của các số từ 1 đến n. Nhiệm vụ của bạn là tìm một chỉ số k bất kỳ là cực tiểu địa phương.

Chỉ số i (1≤i≤n) được gọi là cực tiểu địa phương nếu ai<min{ai−1,ai+1}, trong đó quy ước a0=an+1=+∞. Nói cách khác, hai đầu mút của mảng được coi là lớn hơn mọi phần tử, nên i=1 chỉ cần thoả a1<a2 và i=n chỉ cần thoả an<an−1.

Ban đầu bạn chỉ biết giá trị n, không biết gì thêm về hoán vị. Mỗi lần hỏi, bạn chọn một chỉ số i và hệ thống cho bạn biết giá trị ai. Bạn được hỏi không quá 100 câu hỏi.

Một mảng luôn có ít nhất một cực tiểu địa phương, và nếu có nhiều thì in ra chỉ số nào cũng được chấp nhận.

Dữ liệu vào

Đầu tiên hệ thống in ra một dòng chứa số nguyên n.

Giao thức tương tác

Sau khi đọc n, bạn thực hiện các thao tác sau:

  • Để hỏi, in ra một dòng ? i với 1≤i≤n. Hệ thống trả lời bằng một dòng chứa giá trị ai.
  • Khi đã tìm được đáp án, in ra một dòng ! k rồi kết thúc chương trình. Dòng này không tính là một câu hỏi.

Nếu bạn hỏi quá 100 câu hỏi, hoặc đưa ra chỉ số không phải cực tiểu địa phương, bạn sẽ nhận kết quả sai.

Quan trọng: Sau mỗi lần in ra, bạn phải flush output:

  • C++: cout << endl; hoặc cout.flush();
  • Python: print(..., flush=True)

Ràng buộc

  • 1≤n≤105
  • a là một hoán vị của 1,2,…,n

Ví dụ

Chương trình Hệ thống Giải thích
5 n=5 (hoán vị bí mật là 3,2,1,4,5).
? 3 1 a3=1.
? 4 4 a4=4>a3, nên cực tiểu nằm trong đoạn [1,3].
? 1 3 a1=3.
? 2 2 a2=2<a1, nên cực tiểu nằm trong đoạn [2,3].
? 2 2 Hỏi lại để so cặp (2,3).
? 3 1 a3=1<a2, chỉ còn chỉ số 3.
! 3 a3=1<min{a2,a4}=2, đáp án đúng.
Chương trình Hệ thống Giải thích
2 n=2 (hoán vị bí mật là 1,2).
? 1 1 a1=1.
? 2 2 a1<a2 nên chỉ số 1 là cực tiểu địa phương (vì a0=+∞).
! 1 Đáp án đúng.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0