蓝桥 试题 算法训练 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克的盒子,就可以满足你的顾客。
不论第一个人怎么买,你都可以给他对应质量的盒子,同时保证第二个人也能拿到正确质量的糖果。所以对于k=2,C=2,你用3个盒子就可以满足任意的顾客需求。
输入格式
  第一行一个整数T,表示询问数量。
  接下来T行,每行包含两个整数k和C,分别表示最大人数和每个人花费的最多钱数。
输出格式
  对于每一个询问,输出一行包含"Case #x: y",x是询问编号(从1开始标号),y是你每天最少需要的盒子数量。
样例输入
4
1 5
2 2
10 3
2 50
样例输出
Case #1: 3
Case #2: 3
Case #3: 19
Case #4: 11
数据规模和约定
  对于25%的数据,k<=20,C<=3;
  对于另外20%的数据, k<=1000,C<=10;
  对于另外5%的数据,k=1;
  对于100%的数据,1 <= T <= 100,1 <= k <= 1000,1 <= C <= 10^12。

#include
using namespace std;
int main(){
	int n,k,cnt=1;
	long long c;
	scanf("%d",&n);
	while(n--){
		scanf("%d%lld",&k,&c);
		int num=k;//盒子的数量,每个人都选1个时的情况 
		long long sum=k;//当前盒子能装的糖果数,最大为c*k; 
		for(long long i=2;i<=c;i=sum/k+1){
			num+=1;盒子一个一个加,每次盒子里放i颗糖果
			sum+=i;所有盒子存放的糖果数量
		}
		printf("Case #%d: %d\n",cnt++,num);
	}	
	return 0;
}  

因为要求最少的盒子数量,所以每次加盒子时,这个盒子的糖果数量要尽可能的多。

你可能感兴趣的:(蓝桥杯,算法)