P13061 [GCJ 2020 #1C] Oversized Pancake Choppers

题目描述

当你作为"无限煎饼屋"的主厨刚上班时,又一次发现灾难现场!其他厨师不小心做出了一些巨大的圆形煎饼,且所有煎饼大小相同。这些煎饼太大无法整块供应,于是他们已经开始将煎饼切成扇形切片(在本问题中即为圆形扇形)。你现在有 $\mathbf{N}$ 块切片,其中第 $i$ 块是中心角为 $\mathbf{A}_i$ 纳度(1 纳度 = $10^{-9}$ 度)的扇形。 现在有 $\mathbf{D}$ 位顾客等待用餐。每位顾客需要**一块**与其他顾客**大小完全相同**的切片(具体大小不限)。但现有切片可能无法满足需求,因此你可能需要进行若干次径向切割。 一次切割操作可以将一个中心角为 $X$ 的切片分成两个新切片,其中心角分别为 $Y$ 和 $X - Y$。其中 $0 < Y < X$ 且不需要为整数。你可以对这两个新切片继续切割,以此类推。 允许存在任意大小的剩余切片(不供应给顾客)——毕竟这场灾难让你错过了早餐! 请计算满足顾客需求所需的最少切割次数。

输入格式

输入第一行包含测试用例数量 $\mathbf{T}$。随后每个测试用例包含: - 第一行:两个整数 $\mathbf{N}$(现有切片数)和 $\mathbf{D}$(顾客数) - 第二行:$\mathbf{N}$ 个整数 $\mathbf{A}_1, \mathbf{A}_2, ..., \mathbf{A}_\mathbf{N}$,表示每块切片的中心角(纳度)

输出格式

对于每个测试用例,输出一行 `Case #x: y`,其中 $x$ 为测试用例编号(从 1 开始),$y$ 为所需的最少切割次数。

说明/提示

**样例解释** 样例 #1:初始只有 1 块极小切片。最优方案是: 1. 第一次切割得到 $1/3$ 纳度和 $2/3$ 纳度的切片 2. 将后者再次切割为两块 $1/3$ 纳度的切片 最终得到 3 块相同切片,共需 2 次切割。 样例 #2:已有两块相同大小的切片可直接供应,无需切割。 样例 #3:最优方案是将 8 纳度的切片对半切割,得到 3 块 4 纳度的切片且无剩余。 样例 #4:注意每位顾客必须获得**单块**切片。即使 "1+2" 和 "3" 的总面积相同,也不符合要求。此时至少需要进行 1 次切割。 **数据范围** - $1 \leq T \leq 100$ - $1 \leq A_i < 360 \times 10^9$(所有 $i$) **测试集 1(10 分,可见判定)** - 时间限制:20 秒 - $1 \leq N \leq 300$ - $2 \leq D \leq 3$ **测试集 2(16 分,可见判定)** - 时间限制:20 秒 - $1 \leq N \leq 300$ - $2 \leq D \leq 50$ **测试集 3(16 分,隐藏判定)** - 时间限制:60 秒 - 其中 21 个用例满足 $9000 \leq N \leq 10000$ - 其余 $T-21$ 个用例满足 $1 \leq N \leq 1000$ - $2 \leq D \leq 50$ 翻译由 DeepSeek V3 完成