时间限制 1000 ms 内存限制 64 MB
题目描述
我们有n根的木棍。现在从这些木棍中切割出来m条长度相同的木棍,问这m根木棍最长有多长?
输入数据
第一行输入两个数字,n(1<=n<=1000)为木棍数目,m(1<=m<=1000)为需要切割出的相同长度的木棍数目 随后n个正整数,表示原始木棍的长度(<=10000)
输出数据
每组输出一行结果,表示切割后绳子的最长长度(保留两位小数)
样例输入
4 5 5 6 7 8
样例输出
4.00
#include <iostream> #include <algorithm> using namespace std; int main() { int n, m; cin >> n >> m; int a[1000] = { 0 }; for (int i = 0; i < n; i++) { cin >> a[i]; } sort(a,a+n); double min = 1, max = a[n - 1]; double mid = (min + max) / 2; while (max-min>0.001) { int ans = 0; for (int i = 0; i < n; i++) { ans += int(a[i] / mid); } if (ans < m) { max = mid; mid = (min + max) / 2; } else if (ans > m) { min = mid; mid = (min + max) / 2; } else { min = mid; mid = (min + max) / 2; } } printf("%.2f", mid); return 0; }