二分搜索 POJ 1064 Cable master

题目传送门

 1 /*
 2     题意:n条绳子问切割k条长度相等的最长长度
 3     二分搜索:搜索长度,判断能否有k条长度相等的绳子
 4 */
 5 #include <cstdio>
 6 #include <algorithm>
 7 #include <cstring>
 8 #include <cmath>
 9 using namespace std;
10
11 const int MAXN = 1e4 + 10;
12 const int INF = 0x3f3f3f3f;
13 double w[MAXN];
14 int n, k;
15
16 int check(double len)   {
17     int ret = 0;
18     for (int i=1; i<=n; ++i)    {
19         ret += (int) (w[i] / len);
20     }
21     return ret;
22 }
23
24 int main(void)  {       //POJ 1064 Cable master
25     //freopen ("POJ_1064.in", "r", stdin);
26
27     while (scanf ("%d%d", &n, &k) == 2) {
28         for (int i=1; i<=n; ++i)    {
29             scanf ("%lf", &w[i]);
30         }
31         double l = 0, r = 1e9;
32         for (int i=1; i<=100; ++i)  {
33             double mid = (l + r) / 2;
34             if (check (mid) >= k)   l = mid;
35             else    r = mid;
36         }
37         printf ("%.2f\n", floor (l * 100) / 100);
38     }
39
40     return 0;
41 }
时间: 2025-01-15 00:47:48

二分搜索 POJ 1064 Cable master的相关文章

POJ 1064 Cable master 浮点数二分

Cable master Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 21181   Accepted: 4571 Description Inhabitants of the Wonderland have decided to hold a regional programming contest. The Judging Committee has volunteered and has promised to

poj 1064 Cable master ,二分 精度!!!

给出n根绳子,求把它们切割成K条等长的绳子的最大长度是多少? 二分 用 for(int i=0; i<100; ++i) 代替   while(r-l>eps) 循环100次精度能达到1e-30,基本上能一般题目的精度要求. 而 浮点数二分区间的话容易产生精度缺失导致死循环. #include<cstdio> double L[10000 + 10]; int n, k; int ok(double x) { int cnt = 0; for(int i=0; i<n; ++

POJ 1064 Cable master(二分查找+精度)(神坑题)

POJ 1064 Cable master 一开始把 int C(double x) 里面写成了  int C(int x) ,莫名奇妙竟然过了样例,交了以后直接就wa. 后来发现又把二分查找的判断条件写错了,wa了n次,当 c(mid)<=k时,令ub=mid,这个判断是错的,因为要找到最大切割长度,当满足这个条件时,可能已经不是最大长度了,此时还继续缩小区间,自然就wa了,(从大到小递减,第一次满足这个条件的值,就是最大的值),正确的判断是当 c(mid)<k时,令ub=mid,这样循环1

POJ 1064 Cable master(很好玩的二分搜索)

Cable master Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24292   Accepted: 5200 Description Inhabitants of the Wonderland have decided to hold a regional programming contest. The Judging Committee has volunteered and has promised to

POJ 1064 Cable master (二分 分数化整数)

Cable master Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28764   Accepted: 6091 Description Inhabitants of the Wonderland have decided to hold a regional programming contest. The Judging Committee has volunteered and has promised to

poj 1064 Cable master【浮点型二分查找】

Cable master Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 29554   Accepted: 6247 Description Inhabitants of the Wonderland have decided to hold a regional programming contest. The Judging Committee has volunteered and has promised to

[ACM] poj 1064 Cable master (二分查找)

Cable master Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 21071   Accepted: 4542 Description Inhabitants of the Wonderland have decided to hold a regional programming contest. The Judging Committee has volunteered and has promised to

POJ 1064 Cable master(初遇二分)

题目链接:http://poj.org/problem?id=1064 题意:有n条绳子,他们的长度是Li,如果从他们中切割出K条长度相同的绳子,这相同的绳子每条有多长,输出至小数点后两位 " then the output file must contain the single number "0.00" (without quotes)."不是四舍五入到两位,一般四舍五入题目会说"bounded to"的提示 显然想得到的绳子越短就越能得到

POJ 1064 Cable master (二分答案)

题目链接:http://poj.org/problem?id=1064 有n条绳子,长度分别是Li.问你要是从中切出m条长度相同的绳子,问你这m条绳子每条最长是多少. 二分答案,尤其注意精度问题.我觉得关于浮点数的二分for循环比while循环更好一点.注意最后要用到floor 保证最后答案不会四舍五入. 1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 using namespace std;