洛谷P1721(暂不发)

题目传送门:P1721 [NOI2016] 国王饮水记 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目描述

跳蚤国有 n 个城市,伟大的跳蚤国王居住在跳蚤国首都中,即 1 号城市中。

跳蚤国最大的问题就是饮水问题,由于首都中居住的跳蚤实在太多,跳蚤国王又体恤地将分配给他的水也给跳蚤国居民饮用,这导致跳蚤国王也经常喝不上水。

于是,跳蚤国在每个城市都修建了一个圆柱形水箱,这些水箱完全相同且足够高。一个雨天后,第 i 个城市收集到了高度为 hi​ 的水。由于地理和天气因素的影响,任何两个不同城市收集到的水高度互不相同。

跳蚤国王也请来蚂蚁工匠帮忙,建立了一个庞大的地下连通系统。跳蚤国王每次使用地下连通系统时,可以指定任意多的城市,将这些城市的水箱用地下连通系统连接起来足够长的时间之后,再将地下连通系统关闭。由连通器原理,这些城市的水箱中的水在这次操作后会到达同一高度,并且这一高度等于指定的各水箱高度的平均值。

由于地下连通系统的复杂性,跳蚤国王至多只能使用 k 次地下连通系统。

跳蚤国王请你告诉他,首都 1 号城市水箱中的水位最高能有多高?

输入格式

输入的第一行包含三个正整数 n,k,p 分别表示跳蚤国中城市的数量,跳蚤国王能使用地下连通系统的最多次数,以及你输出的答案要求的精度。p 的含义将在输出格式中解释。

接下来一行包含 nn 个正整数,描述城市的水箱在雨后的水位。其中第 i 个正整数 hi​ 表示第 i 个城市的水箱的水位。保证 hi互不相同,1≤hi≤105。

输出格式

仅一行一个实数,表示 1号城市的水箱中的最高水位。

这个实数只可以包含非负整数部分、小数点和小数部分。其中非负整数部分为必需部分,不加正负号。若有小数部分,则非负整数部分与小数部分之间以一个小数点隔开。若无小数部分,则不加小数点。

你输出的实数在小数点后不能超过 2p位,建议保留至少 p 位。数据保证参考答案与真实答案的绝对误差小于 10−2p。

你的输出被判定为正确当且仅当你的输出与参考答案的绝对误差小于 10−p。

如果你的输出与参考答案的绝对误差不小于 10−pp但小于 10−5,你可以获得该测试点 40%的分数。

输入输出样例

输入 #1

3 1 3
1 4 3

输出 #1

2.666667

输入 #2

3 2 3
1 4 3

输出 #2

3.000000

说明/提示

样例解释 1

由于至多使用一次地下连通系统,有以下五种方案:

  1. 不使用地下连通系统:此时 1 号城市的水箱水位为 1。
  2. 使用一次连通系统,连通 1、2号:此时 1 号城市的水箱水位为 5/2。
  3. 使用一次连通系统,连通 1、3 号:此时 1号城市的水箱水位为 2。
  4. 使用一次连通系统,连通 2、3 号:此时 1 号城市的水箱水位为 1。
  5. 使用一次连通系统,连通 1、2、3 号:此时 1 号城市的水箱水位为 8/3。

样例解释 2

此时最优方案为使用两次连通系统,第一次连通 1,3 号,第二次连通 1,2 号。

样例 3

详见附加文件。

提示

为保证答案精度,我们一般需要尽可能地在运算过程中保留超过 p 位小数。我们可以证明,在各个子任务的参考算法中都能保证,在任何时候始终保留 65p 位小数时,对任何输入得到的输出,与参考答案的绝对误差都小于 10−p。

为了方便选手处理高精度小数,我们提供了定点高精度小数类。选手可以根据自己的需要参考与使用该类,也可以不使用该类。其具体的使用方法请参考下发的文档 decimal.pdf(见附件)。

数据范围

测试点编号 n k p
1 ≤2 ≤5 =5
2 ≤4 ≤5 =5
3 ≤4 ≤5 =5
4 ≤10 =1 =5
5 ≤10 =109 =5
6 ≤10 ≤10 =5
7 ≤10 ≤10 =5
8 ≤100 =1 =5
9 ≤100 =109 =40
10 ≤100 ≤109 =40
11 ≤100 ≤109 =40
12 ≤100 ≤109 =40
13 ≤250 ≤109 =100
14 ≤500 ≤109 =200
15 ≤700 ≤109 =300
16 ≤700 ≤109 =300
17 ≤700 ≤109 =300
18 ≤2500 ≤109 =1000
19 ≤4000 ≤109 =1500
20 ≤8000 ≤109 =3000

附件下载

drink.zip584.09KB

别问我为什么没有理论注释,613行的代码写得我头都大了qwq

下面是AC代码:

code:

#include<bits/stdc++.h>
#define inf 1e15
#define N 8005
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏梓乔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值