洛谷P1577《切绳子》
十月 31, 2018
1640
突然想起《割绳子》
题面描述
有N条绳子,它们的长度分别为Li。如果从它们中切割出K条长度相同的绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位。
Input / Output 格式 & 样例
输入格式
第一行两个整数N和K,接下来N行,描述了每条绳子的长度Li。
输出格式
切割后每条绳子的最大长度。
输入样例
1 |
|
输出样例
1 |
|
解题思路
首先这题涉及到了int
和double
之间的精度转换
所以我们可以把输入的double
都乘100转为int
(题目要求保留两位小数)
不难看出来这题可以枚举答案 但是显然会炸
于是我们要想点优化——二分答案!
我们选择二分绳子的最大长度
这题的单调性是显然的,我就不证了(
Check(int mid)
怎么写?
我们扫一遍绳子长度L[]
,令
即最终绳子被分成的段数
如果(题目中的)则把左边界赋值为mid + 1
,否则把右边界赋值为mid - 1
这里要注意的是如果mid == 0
就直接退出循环
最后cout << fixed << setprecision(2) << (double) r / 100.0 << endl;
代码实现
1 |
|
- 本文作者:Handwer STD
- 本文链接:https://blog.handwer-std.top/2018-10-31/Luogu-P1577/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!