- 题目大意
有n条绳子,分成k段相等的,问能使得最长为多长。
- 解题思路
采用二分法一直逼近求极限状态(注意精度!!!)。
- 代码
#include<iostream> #include<cmath> #include<iomanip> using namespace std; int n, k; double num[10001]; bool find(double x) { int qum = 0; for (int i = 0; i < n; i++) qum += (int)(num[i] / x); if (qum >= k) return true; return false; } int main() { double sum; while (cin >> n >> k) { if (n == 0 && k == 0) break; sum = 0; double max = 0; for (int i = 0; i < n; i++) { cin >> num[i]; if (num[i] > max) max = num[i]; } double l = 0, r = max; double m; for(int i=1;i<100;i++) { m = (l + r) / 2; if (find(m)) l = m; else { r = m; } } cout <<fixed<<setprecision(2)<< l<<endl; } return 0; }