CEOI 2021 - Stones

Xem PDF



Dạng bài
Ngôn ngữ cho phép
C++
Điểm: 2200 (p) Thời gian: 3.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Đề bài

Sau khi Ankica bắt được Branko, cậu từ chối mua báo cho cô và đòi chơi một trò khác vì cho rằng trò trước không công bằng. Ankica ngây thơ đề xuất một trò chơi khác với những viên đá, nhưng Branko vẫn nghi ngờ và quyết định thay đổi hoàn toàn luật chơi.

Trò chơi có \(N\) đống đá, đống thứ \(i\) ban đầu có \(a_i\) viên. Hai người lần lượt lấy một số viên đá khỏi một đống. Người lấy viên đá cuối cùng thắng.

Điểm đặc biệt là ở mỗi lượt, đối thủ sẽ chỉ định đống mà người chơi phải lấy đá.

Đánh số các lượt bằng các số nguyên tăng dần từ \(1\). Trò chơi diễn ra như sau:

  • Ở lượt lẻ, Branko chỉ một đống đá chưa rỗng. Sau đó Ankica lấy ít nhất một và nhiều nhất là toàn bộ số đá khỏi đống ấy.
  • Ở lượt chẵn, Ankica chỉ một đống đá chưa rỗng. Sau đó Branko lấy ít nhất một và nhiều nhất là toàn bộ số đá khỏi đống ấy.

Branko tìm được một số viên đá, chia chúng thành các đống và trò chơi bắt đầu. Là một game thủ chuyên nghiệp, Ankica nhanh chóng nhận ra cấu hình ban đầu là thế thắng cho cô: cô có thể thắng bất kể Branko chơi thế nào.

Bạn có thể thắng trò chơi nếu ở vào vị trí của Ankica không?

Tương tác

Đây là bài tương tác. Chương trình của bạn phải giao tiếp với chương trình của ban tổ chức đóng vai Branko. Chương trình của bạn đóng vai Ankica và phải bảo đảm cô thắng.

Trước tiên, chương trình đọc trạng thái ban đầu của trò chơi từ đầu vào chuẩn. Trạng thái ban đầu gồm hai dòng: dòng đầu chứa số nguyên \(N\); dòng thứ hai chứa \(N\) số nguyên dương \(a_1,a_2,\ldots,a_N\).

Sau đó trò chơi bắt đầu. Vì chương trình đóng vai Ankica, cách xử lý phụ thuộc vào lượt hiện tại là lẻ hay chẵn.

Trong một lượt lẻ:

  1. Trước tiên, chương trình đọc một số nguyên \(k\). Nếu lúc này mọi đống đều rỗng, \(k=-1\); hãy kết thúc chương trình vì trò chơi đã kết thúc và bạn đã thua. Nếu không, \(1\le k\le N\) cho biết Ankica phải lấy đá từ đống thứ \(k\). Đống thứ \(k\) được bảo đảm chưa rỗng. Gọi số đá hiện có trong đống này là \(s_k\).
  2. Sau đó, chương trình in một số nguyên \(x\) (\(1\le x\le s_k\)), là số viên đá Ankica muốn lấy khỏi đống thứ \(k\), rồi xả bộ đệm đầu ra.

Trong một lượt chẵn:

  1. Trước tiên, chương trình in một số nguyên \(l\) rồi xả bộ đệm đầu ra. Nếu lúc này mọi đống đều rỗng, phải in \(l=-1\) và kết thúc chương trình vì trò chơi đã kết thúc và bạn đã thắng. Nếu không, \(1\le l\le N\) cho biết Ankica buộc Branko lấy đá từ đống thứ \(l\). Đống thứ \(l\) phải chưa rỗng. Gọi số đá hiện có trong đống này là \(s_l\).
  2. Sau đó, chương trình đọc một số nguyên \(y\) (\(1\le y\le s_l\)), là số viên đá Branko đã lấy khỏi đống thứ \(l\).

Trạng thái ban đầu được bảo đảm là thế thắng cho Ankica, bất kể Branko chơi thế nào.

Bạn có thể tải từ hệ thống chấm một chương trình mẫu giao tiếp đúng với chương trình của ban tổ chức, bao gồm thao tác xả bộ đệm đầu ra, và giải được ví dụ tương tác thứ nhất.

Chấm điểm

Đặt \(M=\max(a_1,a_2,\ldots,a_N)\).

  • Subtask 1 (12 điểm): \(1\le N,M\le7\).
  • Subtask 2 (13 điểm): \(1\le N\le12\), \(1\le M\le500\).
  • Subtask 3 (15 điểm): \(1\le N,M\le500\)\(a_i=a_j\) với mọi \(1\le i,j\le N\).
  • Subtask 4 (60 điểm): \(1\le N,M\le500\).

Ví dụ tương tác

Ví dụ 1

Hướng Giá trị Giải thích
Ban tổ chức \(\to\) chương trình 1 Có một đống đá.
Ban tổ chức \(\to\) chương trình 4 Đống duy nhất có \(4\) viên đá.
Ban tổ chức \(\to\) chương trình 1 Branko chỉ có thể buộc Ankica lấy đá từ đống thứ nhất.
Chương trình \(\to\) ban tổ chức 4 Ankica lấy toàn bộ đá khỏi đống thứ nhất.
Chương trình \(\to\) ban tổ chức -1 Không còn viên đá nào và Ankica thắng.

Ví dụ 2

Hướng Giá trị Giải thích
Ban tổ chức \(\to\) chương trình 3 Có ba đống đá.
Ban tổ chức \(\to\) chương trình 1 1 5 Ba đống lần lượt có \(1\), \(1\)\(5\) viên đá.
Ban tổ chức \(\to\) chương trình 3 Branko buộc Ankica lấy ít nhất một viên từ đống thứ ba.
Chương trình \(\to\) ban tổ chức 5 Ankica lấy toàn bộ đá khỏi đống thứ ba.
Chương trình \(\to\) ban tổ chức 1 Ankica buộc Branko lấy ít nhất một viên từ đống thứ nhất.
Ban tổ chức \(\to\) chương trình 1 Branko lấy viên đá duy nhất khỏi đống thứ nhất.
Ban tổ chức \(\to\) chương trình 2 Branko buộc Ankica lấy ít nhất một viên từ đống thứ hai.
Chương trình \(\to\) ban tổ chức 1 Ankica lấy viên đá duy nhất khỏi đống thứ hai.
Chương trình \(\to\) ban tổ chức -1 Không còn viên đá nào và Ankica thắng.

Tệp

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: