A - Cable master (HDU - 1551)
阿新 • • 發佈:2018-02-14
class break 二分 master mes als hdu double bool
- 題目大意
有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; }
A - Cable master (HDU - 1551)