洛谷P1577 切绳子

题目描述

有 $N$ 条绳子,它们的长度分别为 $L_i$。如果从它们中切割出 $K$ 条长度相同的绳子,这 $K$ 条绳子每条最长能有多长?答案保留到小数点后 $2$ 位(直接舍掉 $2$ 位后的小数)。

输入格式

第一行两个整数 $N$ 和 $K$,接下来 $N$ 行,描述了每条绳子的长度 $L_i$ 。

输出格式

切割后每条绳子的最大长度。答案与标准答案误差不超过 $0.01$ 或者相对误差不超过 $1\%$ 即可通过。

样例 #1

样例输入 #1

4 11 8.02 7.43 4.57 5.39

样例输出 #1

2.00

提示

对于 $100\%$ 的数据 $0<L_i\leq 100000.00,0<n\leq 10000,0<k\leq 10000$

题解

#include <bits/stdc++.h> using namespace std; int n, k, l[10086]; double t; bool check(double x) { int cnt = 0; for (int i = 1; i <= n; i++) cnt += l[i] / x; if (cnt >= k) return true; else return false; } int main() { cin >> n >> k; for (int i = 1; i <= n; i++) { cin >> t; l[i] = t * 100; } int L = 1, R = 100000000; while (L <= R) { int mid = (L + R) >> 1; if (mid == 0) { cout << "0.00"; return 0; } if (check(mid)) L = mid + 1; else R = mid - 1; } printf("%.2lf", R / 100.0); return 0; }