Trò chơi giáo dục

Đề bài

Mô tả

Cho một dãy gồm n số nguyên không âm a1,a2,…,an.

Một nước đi được thực hiện như sau: chọn một chỉ số i (1≤i≤n) sao cho ai>0, và một số nguyên t≥0 sao cho i+2t≤n. Sau đó giảm ai đi 1 và tăng ai+2t lên 1.

Nói cách khác, mỗi nước đi chuyển một đơn vị từ vị trí i sang vị trí i+2t, với điều kiện vị trí đích không vượt quá n.

Với mỗi k (1≤k<n), hãy tính số nước đi ít nhất cần thực hiện để a1=a2=…=ak=0.

Mỗi giá trị k được xét độc lập, luôn bắt đầu từ dãy ban đầu.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n.
  • Dòng thứ hai chứa n số nguyên a1,a2,…,an.

Dữ liệu ra

In ra đúng n−1 dòng. Dòng thứ k chứa số nước đi ít nhất để k phần tử đầu tiên của dãy ban đầu đều bằng 0.

Ràng buộc

  • 2≤n≤300
  • 0≤ai≤104

Ví dụ

Input Output Giải thích
8
1 2 3 4 5 6 7 8
1
3
6
10
16
24
40
Với k≤4, mỗi đơn vị ở vị trí i≤k đều tới được một vị trí >k bằng đúng một nước đi, nên đáp án là a1+…+ak. Với k=7, đơn vị ở vị trí 1 phải đi quãng đường 7=4+2+1, tốn 3 nước; còn đơn vị ở vị trí 5 phải đi quãng đường 3=2+1, tốn 2 nước.
4
1 0 1 2
1
1
3
Với k=1: chuyển đơn vị ở vị trí 1 sang vị trí 2 (quãng đường 20), tốn 1 nước. Với k=2: cùng một nước đi đó không đủ, nhưng chuyển thẳng từ vị trí 1 sang vị trí 3 (quãng đường 21) thì cả a1 và a2 đều bằng 0, vẫn tốn 1 nước. Với k=3: đơn vị ở vị trí 1 cần đi quãng đường 3=2+1 (tốn 2 nước), đơn vị ở vị trí 3 cần 1 nước, tổng cộ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.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