手机页面网站模板怎么卖,宁波网站建设优化找哪家,网站 cms,百度快速收录办法截取
题目描述
给你N段线的长度#xff0c;现在要你从他们上面切下K段来#xff08;切下的不能合并#xff09;#xff0c;使得这K段长度相等#xff0c;并且最大。如若求出的答案小于0.01#xff0c;则认为无解#xff0c;输出0.00。#xff08;所有非整数都精确到了…截取
题目描述
给你N段线的长度现在要你从他们上面切下K段来切下的不能合并使得这K段长度相等并且最大。如若求出的答案小于0.01则认为无解输出0.00。所有非整数都精确到了两位输出亦然1NK10000
输入样例
4 11
8.02
7.43
4.57
5.39
输出样例
2.00
解题思路
两位小数可以直接乘100用int longlong来计算,在1…所有数加在一起这一堆数中选一个总共可以分成k段并且最大的的数
#includecstdio
using namespace std;
long long k,l,r,mid,a[10100];
int n;
float ans;//不知为什么用double就会输入有误
bool pd(long long x)
{long long z0;for (int i1;in;i)z(a[i]/x);//计算总共可以分几段return zk;
}
int main()
{scanf(%d%ld,n,k);for (int i1;in;i){scanf(%f,ans);a[i](long long)(ans*100);//乘上100来计算ra[i];//计算总值}l1;if (kr) r-1,l0;//特殊情况if (kr) r0;while (lr){mid(lr1)/2;//二分if (pd(mid)) lmid;//pd(mid))是判断每段长度为mid可不可以分k段else rmid-1;}ans(float)l/100;//结果还要除以100printf(%.2f,ans);//保留两位输出
}