CFCF1498B.Box Fitting
普及/提高-
官方
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给定 n 个矩形,每个矩形的高度为 1。每个矩形的宽度都是 2 的幂(即可以表示为 2x,其中 x 是非负整数)。
还给定一个二维盒子,其宽度为 W。注意,W 不一定是 2 的幂。此外,W 至少和所有矩形中最大的宽度一样大。
你需要求出该盒子的最小高度,使得能够放下所有给定的矩形。放置后盒子中可以有空余空间。
你不能旋转矩形来使其适应盒子。此外,任意两个不同的矩形不能重叠,即任意两个不同的矩形的交集面积必须为零。
具体样例的可视化说明见下方提示。
输入格式
输入的第一行为一个整数 t(1≤t≤5⋅103),表示测试用例的数量。每个测试用例包含两行。
对于每个测试用例:
- 第一行包含两个整数 n(1≤n≤105)和 W(1≤W≤109);
- 第二行包含 n 个整数 w1,w2,…,wn(1≤wi≤106),其中 wi 表示第 i 个矩形的宽度。每个 wi 都是 2 的幂;
- 另外,保证 i=1maxnwi≤W。
所有测试用例中 n 的总和不超过 105。
输出格式
输出 t 个整数。第 i 个整数表示第 i 个测试用例的答案——二维盒子的最小高度。
输入输出样例
输入#1
2 5 16 1 2 8 4 8 6 10 2 8 8 2 2 8
输出#1
2 3
说明/提示
对于第一个样例,下面的图展示了一种将五个矩形以最小高度放入宽度为 16 的二维盒子的方法:

在上图中,每个矩形内的数字表示其宽度。二维盒子的宽度为 16(下方箭头所示)。在这种情况下,二维盒子的最小高度为 2(左侧所示)。
对于第二个样例,你可以通过在每一层放置两个矩形(宽度分别为 8 和 2),共三层,得到最小高度为 3。