Tên lửa

Đề bài

Mô tả

Đây là một bài toán tương tác (interactive).

Một con tàu vũ trụ đang bay tới sao Hỏa. Gọi x là khoảng cách còn lại tới sao Hỏa. Bạn không biết x, chỉ biết rằng 1xm với m cho trước, và x là số nguyên dương.

Bạn có thể hỏi máy tính của tàu. Mỗi câu hỏi là một số nguyên y với 1ym. Câu trả lời đúng cho câu hỏi này là:

  • 1 nếu x<y;
  • 0 nếu x=y;
  • 1 nếu x>y.

Tiếc là máy tính đã hỏng nên không phải lúc nào cũng trả lời đúng. Cụ thể, nếu câu trả lời đúng là t thì máy tính sẽ trả lời t khi nó nói thật, và trả lời t khi nó nói dối.

Máy tính có một dãy p gồm n phần tử, mỗi phần tử bằng 0 hoặc 1. Nó duyệt dãy này theo vòng tròn: câu hỏi thứ nhất dùng p1, câu hỏi thứ hai dùng p2, …, câu hỏi thứ n dùng pn, câu hỏi thứ n+1 lại dùng p1, và cứ thế tiếp tục. Nếu phần tử đang dùng bằng 1 thì máy tính nói thật, nếu bằng 0 thì nó nói dối. Bạn không biết dãy p, chỉ biết độ dài n của nó.

Bạn được phép đặt tối đa 60 câu hỏi. Khoảng cách x không thay đổi trong suốt quá trình hỏi.

Lời giải của bạn chỉ được chấp nhận nếu thực sự nhận được câu trả lời 0 từ máy tính, kể cả khi x đã được xác định duy nhất từ các câu trả lời trước đó.

Nếu đọc được 0, bạn phải kết thúc chương trình ngay lập tức. Nếu đọc được 2, nghĩa là câu hỏi không hợp lệ hoặc bạn đã vượt quá 60 câu hỏi; khi đó cũng phải kết thúc chương trình ngay.

Dữ liệu vào

Dòng đầu tiên chứa hai số nguyên mn — khoảng cách lớn nhất có thể tới sao Hỏa và độ dài của dãy p.

Sau mỗi câu hỏi, đọc một dòng chứa câu trả lời của máy tính: một trong các giá trị 1, 0, 1 hoặc 2.

Dữ liệu ra

Mỗi câu hỏi in trên một dòng: một số nguyên y với 1ym.

Sau mỗi lần in, bạn phải flush output (ví dụ cout << endl hoặc cout.flush() trong C++, flush=True trong Python).

Ràng buộc

  • 1m109
  • 1n30
  • 1xm
  • Tối đa 60 câu hỏi

Ví dụ

Input Output Giải thích
5 2
1
-1
0
1
1
3
Ở đây x=3p=[1,0], tức máy tính lần lượt nói thật, nói dối, nói thật, nói dối, … Hỏi 1 lần đầu: đúng là 1, nói thật nên trả lời 1. Hỏi 1 lần hai: đúng vẫn là 1, nhưng nói dối nên trả lời 1; qua hai câu này ta biết p=[1,0]. Hỏi 3: đúng là 0, mà 0=0 nên dù nói thật hay nói dối vẫn trả lời 0. Đây chỉ là một cách hỏi hợp lệ; mọi dãy câu hỏi khác kết thúc bằng câu trả lời 0 trong không quá 60 lượt đều được chấp nhận.
2 1
1
1
0
1
1
2
Ở đây x=2p=[1], máy tính luôn nói thật. Câu hỏi đầu tiên xác định p1=1. Sau đó tìm kiếm nhị phân trên [1,2]: hỏi 1 được trả lời 1 nên x>1, rồi hỏi 2 được trả lời 0.

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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0