# 蓝桥杯Candy Store

问题描述 经营一家糖果店是非常困难的,你需要优化各种各样的东西。最近你在销售一种非常时髦的糖果,叫做Whizboppers。这种糖果变质非常迅速,所以:
  ·你必须每天早上从供应商买来新的Whizboppers。
  ·你必须用当天早上从供应商买来的盒子装着糖果出售。
  你可以从你的供应商处买来装有任意整数克糖果的盒子。
  每天有至多k位顾客到你的店里来。从第1个人开始,每个人会选择花费整数分的钱来买Whizboppers,钱数在1分到C分之间(包含1分和C分)。你打算以1分钱每克的价格出售;所以如果一个人想要花4分钱,你会给他恰好4克糖果。你可以给他1个4克的盒子,也可能是1个2克的盒子和2个1克的盒子。
  你最少需要买几个盒子才能保证,不管每个人想花多少钱买糖,你总是可以给他们对应质量的糖果?
  注意:当一个人选择自己想买多少糖果后,你知道之前的人已经买了多少糖,但不能预知之后的人打算买多少糖。
  举个例子,如果每天至多有2位顾客到你的店里,每个人至多花2分钱(k=2,C=2),你可以从你的供应商买4个1克的盒子。但是你可以做的更好:只要买2个1克的盒子和1个2克的盒子,就可以满足你的顾客。如下所示:
第一个人给第一个人的盒子第二个人给第二个人的盒子2分1 个 2克2分
1分2 个 1克
1 个 1克1分1 个 1克2分
1分1 个 2克
1 个 1克
  不论第一个人怎么买,你都可以给他对应质量的盒子,同时保证第二个人也能拿到正确质量的糖果。所以对于k=2,C=2,你用3个盒子就可以满足任意的顾客需求。 输入格式   第一行一个整数T,表示询问数量。   接下来T行,每行包含两个整数k和C,分别表示最大人数和每个人花费的最多钱数。 输出格式   对于每一个询问,输出一行包含"Case #x: y",x是询问编号(从1开始标号),y是你每天最少需要的盒子数量。

以下程序实现了这一功能,请你填补空白处的内容: ```cpp #include #include using namespace std; int main() { int n, k, count = 1; long long c; cin >> n; while (n--) { cin >> k >> c; int num = k; long long sum = k; for (long long i = 2; i <= c; i = sum / k + 1) { int t = num; ________________ } cout << "Case #" << count++ <<": " << num << endl; } return 0; } ``` ## template ```cpp #include #include using namespace std; int main() { int n, k, count = 1; long long c; cin >> n; while (n--) { cin >> k >> c; int num = k; long long sum = k; for (long long i = 2; i <= c; i = sum / k + 1) { int t = num; num += ceil((k * i - sum) * 1.0 / i); sum += i * (num - t); } cout << "Case #" << count++ <<": " << num << endl; } return 0; } ``` ## 答案 ```cpp num += ceil((k * i - sum) * 1.0 / i); sum += i * (num - t); ``` ## 选项 ### A ```cpp num += ceil((k * i - sum) * 1.0 / i); sum += i * (num + t); ``` ### B ```cpp num += ceil((k - sum) * 1.0 / i); sum += i * (num - t); ``` ### C ```cpp num += ceil((k * (i - sum)) * 1.0 / i); sum += i * (num + t); ```