给定N条网线原材料 (正整数N属于[1, 10^4])
给定每条网线材料的长度(浮点数类型,属于[1, 10^8])
(将于原材料裁剪即可得到网线)
K为所需的网线数量 (正整数K属于[1, 10^4]),且需保证每条长度相等
输出最长长度。
思路:
解的值域为(0, the min length of all]
二分+验证
给定每条网线材料的长度(浮点数类型,属于[1, 10^8])
(将于原材料裁剪即可得到网线)
K为所需的网线数量 (正整数K属于[1, 10^4]),且需保证每条长度相等
输出最长长度。
思路:
解的值域为(0, the min length of all]
二分+验证
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define INF 1e5
using namespace std;
double line[10100];
int num_line;
int cnt;
bool check(double length)
{
int temp_cnt = 0;
for (int i = 0; i < num_line; ++i)
temp_cnt += (int)(line[i]/length);
return temp_cnt >= cnt;
}
double solve()
{
double l = 0;
double r = INF;
for (int i = 0; i < 100; ++i)
{
double mid = (l+r)/2;
if(check(mid))
l = mid;
else
r = mid;
}
return r;
}
int main()
{
cin>>num_line>>cnt;
for (int i = 0; i < num_line; ++i)
scanf("%lf", &line[i]);
printf("%.2lf\n", (floor(solve()*100) / 100));
//cout<<check(200)<<endl;
}