测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A7063. Welcome24ever 和巧克力

编程题 省选/NOI-
知识点

题目描述

Welcome24ever 买到一块 $n$ 维“单位立方体”巧克力(每条边长度都是 $1$)。这块巧克力在第 $i$ 个维度上被等分成 $a_i$ 份,因此整块巧克力一共被划分成 $a_1 a_2 \cdots a_n$ 个小块;每个小块在第 $i$ 维的长度是 $\frac{1}{a_i}$,体积是 $\frac{1}{a_1 a_2 \cdots a_n}$。

Welcome24ever 和朋友们想把巧克力切成至少 $k$ 块,并且希望**最小那一块**的体积尽量大。切割规则如下:

- 只能沿着原本小块的分割面切(也就是只能在“格子线”上切)。
- 每一次切割必须选择某一个维度,并且这刀要贯穿整个巧克力。
- 所有切割结束后,才把巧克力分成小块。

更形式化地说:你需要选择整数 $b_1,b_2,\ldots,b_n$,满足 $1 \le b_i \le a_i$,表示第 $i$ 个维度上把巧克力切成 $b_i$ 份,则总块数为 $b_1 b_2 \cdots b_n$,要求
$b_1 b_2 \cdots b_n \ge k$。

在这种切法下,最小的一块在第 $i$ 维至少会包含 $\left\lfloor \frac{a_i}{b_i} \right\rfloor$ 个小段,所以最小块体积为
$\left(\prod_{i=1}^n \left\lfloor \frac{a_i}{b_i} \right\rfloor\right)\cdot \frac{1}{a_1 a_2 \cdots a_n}$。

你要最大化的量是:
$\left(\prod_{i=1}^n \left\lfloor \frac{a_i}{b_i} \right\rfloor\right)\cdot \frac{1}{a_1 a_2 \cdots a_n}\cdot k$。

输入格式

第一行包含两个整数 $n,k$。
第二行包含 $n$ 个整数 $a_1,a_2,\ldots,a_n$。

输出格式

输出一个实数,表示最大可能的“最小块体积乘以 $k$”,要求绝对或相对误差不超过 $10^{-9}$。
如果无论怎么切都无法分成至少 $k$ 块,输出 $0$。

输入输出样例

输入 #1
1 2
5
输出 #1
0.8
输入 #2
2 6
5 10
输出 #2
0.72
输入 #3
2 7
4 4
输出 #3
0.875
输入 #4
2 3
4 5
输出 #4
0.75
输入 #5
4 444
57 179 239 2
输出 #5
0.97557326850704739751
输入 #6
2 5
2 2
输出 #6
0

说明/提示

## 数据范围
- $1 \le n \le 100$
- $1 \le k \le 10^7$
- $1 \le a_i \le 10^7$
## 样例解释
- 样例 1:取 $b_1=2$,最小段数是 $\left\lfloor\frac{5}{2}\right\rfloor=2$,最小块体积是 $\frac{2}{5}$,答案 $\frac{2}{5}\cdot 2=0.8$。
- 样例 2:可以切成 $b_1=2,b_2=3$,最小块体积是 $\frac{\lfloor5/2\rfloor}{5}\cdot\frac{\lfloor10/3\rfloor}{10}=\frac{2}{5}\cdot\frac{3}{10}$,答案乘上 $k=6$ 得到 $0.72$。
- 样例 6:最多只能分成 $2\cdot 2=4$ 块,小于 $k=5$,所以输出 $0$。
上一题 去做题 下一题