Đấu trường tham lam

Đề bài

Mô tả

Hai người chơi tham gia trò chơi sau với một rương vàng ban đầu chứa N đồng. Người chơi thứ nhất đi trước, sau đó hai người luân phiên nhau lượt. Trò chơi kết thúc khi rương rỗng.

Trong mỗi lượt, người chơi hiện tại phải chọn đúng một trong các nước đi sau:

  1. Lấy 1 đồng vàng từ rương.
  2. Lấy đúng một nửa số đồng vàng trong rương. Nước đi này chỉ được phép khi số đồng vàng hiện có trong rương là số chẵn.

Cả hai người chơi đều chơi tối ưu nhằm tối đa hoá số đồng vàng mà bản thân thu được đến cuối ván. Hãy tính số đồng vàng mà người chơi thứ nhất nhận được khi cả hai cùng chơi tối ưu.

Dữ liệu vào

  • Dòng đầu chứa số nguyên T — số bộ dữ liệu.
  • T dòng tiếp theo, mỗi dòng chứa một số nguyên N — số đồng vàng ban đầu trong rương.

Dữ liệu ra

In ra T dòng, mỗi dòng là một số nguyên — số đồng vàng tối đa mà người chơi thứ nhất có thể đạt được trong bộ dữ liệu tương ứng.

Ràng buộc

  • 1T105
  • 1N1018

Ví dụ

Input Output Giải thích
2
5
6
2
4
Với N=5: người 1 lấy 1, người 2 lấy 2 (nửa của 4), người 1 lấy 1, người 2 lấy 1. Người 1 được 2 đồng. Với N=6: người 1 lấy 3 (nửa của 6), người 2 lấy 1, người 1 lấy 1, người 2 lấy 1. Người 1 được 4 đồng.
3
1
2
4
1
1
3
N=1: chỉ còn cách lấy 1. N=2: lấy 1 (hoặc nửa cũng là 1), người 2 lấy 1. N=4: người 1 lấy nửa (2), người 2 buộc lấy 1 (lấy nửa của 2 chỉ được 1), người 1 lấy 1, được tổng 3.

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