308049: CF1458B. Glass Half Spilled

Memory Limit:512 MB Time Limit:2 S
Judge Style:Text Compare Creator:
Submit:0 Solved:0

Description

Glass Half Spilled

题意翻译

现在有 $n$ 杯水,其中第 $i$ 杯有容积 $a_i$ 单位,初始时装有 $b_i$ 单位的水. 现在你可以进行若干次操作,每次选择一杯水的一定水量并倒到另一杯水中,但是因为这些杯子形状非常奇怪,因此每倒一次水,倒的水会有一半洒在地上. 换句话说,如果你选择从有 $c_i$ 单位水的杯子 $i$ 向有 $c_j$ 单位水的杯子 $j$ 倒 $x(x\leq c_i)$ 单位水,就会洒出去 $\frac{x}{2}$ 单位水,而杯子 $i$ 所含水的体积变为 $c_i-x$.杯子 $j$ 所含水的体积就变为了 $\min(a_j,c_j+\frac{x}{2})$ 单位水. 现在你要求出对于所有整数 $p$ 满足 $1\leq p\leq n$,求出进行若干次操作后选取 $p$ 个杯子能获得水单位数量的最大值. 第一行输入 $1$ 个整数 $n(1\leq n\leq 100)$. 接下来输入 $n$ 行,每行 $2$ 个整数,其中第 $i$ 行表示 $a_i,b_i(0\leq b_i\leq a_i\leq100,a_i>0)$. 输出 $1$ 行 $n$ 个实数,第 $i$ 个表示取 $i$ 个杯子所能获得水单位的最大值,答案误差不超过 $10^{-9}$ 时就算正确.

题目描述

There are $ n $ glasses on the table numbered $ 1, \ldots, n $ . The glass $ i $ can hold up to $ a_i $ units of water, and currently contains $ b_i $ units of water. You would like to choose $ k $ glasses and collect as much water in them as possible. To that effect you can pour water from one glass to another as many times as you like. However, because of the glasses' awkward shape (and totally unrelated to your natural clumsiness), each time you try to transfer any amount of water, half of the amount is spilled on the floor. Formally, suppose a glass $ i $ currently contains $ c_i $ units of water, and a glass $ j $ contains $ c_j $ units of water. Suppose you try to transfer $ x $ units from glass $ i $ to glass $ j $ (naturally, $ x $ can not exceed $ c_i $ ). Then, $ x / 2 $ units is spilled on the floor. After the transfer is done, the glass $ i $ will contain $ c_i - x $ units, and the glass $ j $ will contain $ \min(a_j, c_j + x / 2) $ units (excess water that doesn't fit in the glass is also spilled). Each time you transfer water, you can arbitrarlly choose from which glass $ i $ to which glass $ j $ to pour, and also the amount $ x $ transferred can be any positive real number. For each $ k = 1, \ldots, n $ , determine the largest possible total amount of water that can be collected in arbitrarily chosen $ k $ glasses after transferring water between glasses zero or more times.

输入输出格式

输入格式


The first line contains a single integer $ n $ ( $ 1 \leq n \leq 100 $ ) — the number of glasses. The following $ n $ lines describe the glasses. The $ i $ -th of these lines contains two integers $ a_i $ and $ b_i $ ( $ 0 \leq b_i \leq a_i \leq 100 $ , $ a_i > 0 $ ) — capacity, and water amount currently contained for the glass $ i $ , respectively.

输出格式


Print $ n $ real numbers — the largest amount of water that can be collected in $ 1, \ldots, n $ glasses respectively. Your answer will be accepted if each number is within $ 10^{-9} $ absolute or relative tolerance of the precise answer.

输入输出样例

输入样例 #1

3
6 5
6 5
10 2

输出样例 #1

7.0000000000 11.0000000000 12.0000000000

说明

In the sample case, you can act as follows: 2. for $ k = 1 $ , transfer water from the first two glasses to the third one, spilling $ (5 + 5) / 2 = 5 $ units and securing $ 2 + (5 + 5) / 2 = 7 $ units; 3. for $ k = 2 $ , transfer water from the third glass to any of the first two, spilling $ 2 / 2 = 1 $ unit and securing $ 5 + 5 + 2 / 2 = 11 $ units; 4. for $ k = 3 $ , do nothing. All $ 5 + 5 + 2 = 12 $ units are secured.

Input

题意翻译

现在有 $n$ 杯水,其中第 $i$ 杯有容积 $a_i$ 单位,初始时装有 $b_i$ 单位的水. 现在你可以进行若干次操作,每次选择一杯水的一定水量并倒到另一杯水中,但是因为这些杯子形状非常奇怪,因此每倒一次水,倒的水会有一半洒在地上. 换句话说,如果你选择从有 $c_i$ 单位水的杯子 $i$ 向有 $c_j$ 单位水的杯子 $j$ 倒 $x(x\leq c_i)$ 单位水,就会洒出去 $\frac{x}{2}$ 单位水,而杯子 $i$ 所含水的体积变为 $c_i-x$.杯子 $j$ 所含水的体积就变为了 $\min(a_j,c_j+\frac{x}{2})$ 单位水. 现在你要求出对于所有整数 $p$ 满足 $1\leq p\leq n$,求出进行若干次操作后选取 $p$ 个杯子能获得水单位数量的最大值. 第一行输入 $1$ 个整数 $n(1\leq n\leq 100)$. 接下来输入 $n$ 行,每行 $2$ 个整数,其中第 $i$ 行表示 $a_i,b_i(0\leq b_i\leq a_i\leq100,a_i>0)$. 输出 $1$ 行 $n$ 个实数,第 $i$ 个表示取 $i$ 个杯子所能获得水单位的最大值,答案误差不超过 $10^{-9}$ 时就算正确.

加入题单

上一题 下一题 算法标签: