1 条题解
-
0
//所需头文件以及全局变量 #include <stdio.h> #include<stdbool.h> int n,k;//蛋糕数量以及人数 double w[100000];//每个蛋糕的质量
本题核心思想是利用二分求出蛋糕可利用的极限质量
int sum=0;//所有蛋糕质量和 for(int i=0;i<n;i++) { scanf("%lf",&w[i]); w[i]*=100; sum+=w[i]; } int ex=sum/k; //在无舍去情况下最大单个蛋糕质量
因为精度问题本题不建议使用浮点二分,所以通过将所有质量乘以100以转化成整数。
int l=0,r=ex; /*l为左端点,r为右端点。 因为结果为小数,且蛋糕质量乘过100 输出时需除以‘100.0’ 输出类型为double,即‘.2lf’保留两位小数*/
因为ex为未舍去质量,所求质量小于等于ex,所以右端点r可以定义为ex.
while(l<=r) //进行二分,l为左端点,r为右端点 { int mid=(l+r)/2.0;//取中点 //check函数用于判断蛋糕是否够分 if(check(mid)) { l=mid+1; //加一是为了跳出循环,结果输出时需手动减一 } else { r=mid-1; } }
最后答案输出左端点l即可
- 1
信息
- ID
- 793
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 512
- 已通过
- 19
- 上传者