CF178A3.Educational Game

普及-

通过率:0%

时间限制:2.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

The Smart Beaver from ABBYY began to develop a new educational game for children. The rules of the game are fairly simple and are described below.

The playing field is a sequence of n non-negative integers a__i numbered from 1 to n. The goal of the game is to make numbers _a_1, _a_2, ..., a__k (i.e. some prefix of the sequence) equal to zero for some fixed k (k < n), and this should be done in the smallest possible number of moves.

One move is choosing an integer i (1 ≤ i ≤ n) such that a__i > 0 and an integer t (t ≥ 0) such that i + 2_t_ ≤ n. After the values of i and t have been selected, the value of a__i is decreased by 1, and the value of a__i + 2_t_ is increased by 1. For example, let n = 4 and a = (1, 0, 1, 2), then it is possible to make move i = 3, t = 0 and get a = (1, 0, 0, 3) or to make move i = 1, t = 1 and get a = (0, 0, 2, 2) (the only possible other move is i = 1, t = 0).

You are given n and the initial sequence a__i. The task is to calculate the minimum number of moves needed to make the first k elements of the original sequence equal to zero for each possible k (1 ≤ k < n).

ABBYY 的聪明海狸开始为儿童开发一款新的教育游戏。游戏规则非常简单,如下所述。

游戏场地是一个长度为 nn 的非负整数序列 aia_i,下标从 11 到 nn。游戏目标是:对某个固定的 kk(其中 k<nk < n),使得序列的前缀 a1,a2,…,aka_1, a_2, \dots, a_k 全部变为 00,且要求完成该目标所需的移动步数尽可能少。

一次移动定义为:选择一个整数 ii(满足 1≤i≤n1 \le i \le n)使得 ai>0a_i > 0,再选择一个整数 tt(满足 t≥0t \ge 0)使得 i+2t≤ni + 2^t \le n。选定 ii 和 tt 后,将 aia_i 的值减 11,同时将 ai+2ta_{i + 2^t} 的值加 11。例如,设 n=4n = 4,初始序列为 a=(1,0,1,2)a = (1, 0, 1, 2),则可执行移动 i=3, t=0i = 3,\, t = 0,得到新序列 a=(1,0,0,3)a = (1, 0, 0, 3);也可执行移动 i=1, t=1i = 1,\, t = 1,得到新序列 a=(0,0,2,2)a = (0, 0, 2, 2)(其余唯一可能的移动是 i=1, t=0i = 1,\, t = 0)。

现给出 nn 及初始序列 aia_i。任务是:对每个可能的 kk(1≤k<n1 \le k < n),计算使原序列的前 kk 个元素全部变为 00 所需的最少移动步数。

输入格式

The first input line contains a single integer n. The second line contains n integers a__i (0 ≤ a__i ≤ 104), separated by single spaces.

The input limitations for getting 20 points are:

  • 1 ≤ n ≤ 300

The input limitations for getting 50 points are:

  • 1 ≤ n ≤ 2000

The input limitations for getting 100 points are:

  • 1 ≤ n ≤ 105

第一行输入包含一个整数 nn。第二行包含 nn 个整数 aia_i(0 ≤ ai ≤ 1040 \leq a_i \leq 10^4),以单个空格分隔。

获得 20 分的输入限制为:

  • 1 ≤ n ≤ 3001 \leq n \leq 300

获得 50 分的输入限制为:

  • 1 ≤ n ≤ 20001 \leq n \leq 2000

获得 100 分的输入限制为:

  • 1 ≤ n ≤ 1051 \leq n \leq 10^5

输出格式

Print exactly n - 1 lines: the k-th output line must contain the minimum number of moves needed to make the first k elements of the original sequence a__i equal to zero.

Please do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cin, cout streams, or the %I64d specifier.

精确输出 n−1n-1 行:第 kk 行输出应为使原序列 aia_i 的前 kk 个元素均变为零所需的最少操作次数。

在 C++ 中,请勿使用 %lld 说明符读取或写入 64 位整数。推荐使用 cin、cout 流,或 %I64d 说明符。

输入输出样例

  • 输入#1

    4
    1 0 1 2

    输出#1

    1
    1
    3
  • 输入#2

    8
    1 2 3 4 5 6 7 8

    输出#2

    1
    3
    6
    10
    16
    24
    40

输入解题思路,AI测评打分。不知道怎么写?

首页