【POJ - 1064】Cable master(二分)

Cable master

直接上中文了

Descriptions

输入2个数 N  K

n条绳子    要分成大于等于k段

求每段最长多长呢?并且每段不能小于1cm

必须以厘米精度写入数字,小数点后正好是两位数。
如果无法切割所请求的每个长度至少为1厘米的件数,则输出文件必须包含单个数字“0.00”(不带引号)。

多组文件输入

Sample Input

4 11
8.02
7.43
4.57
5.39

Sample Output

2.00

题目链接

https://vjudge.net/problem/POJ-1064

这个输出是个坑点,不能直接用double,然后 printf("%.2f\n")这会自动四舍五入,是错误的,我看其他大佬的方法是,输入时先*100输出的时候/100就能解决这个输出问题

其他的没什么,就是二分,不懂的再看看代码吧

AC代码

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#define IOS ios_base::sync_with_stdio(0); cin.tie(0);
#define Mod 1000000007
#define eps 1e-6
#define ll long long
#define INF 0x3f3f3f3f
#define MEM(x,y) memset(x,y,sizeof(x))
#define Maxn 10000+5
using namespace std;
int l,r;//左,右
int N,K;
int main()
{
    while(cin>>N>>K)
    {
        int len[Maxn];//绳子
        for(int i=0; i<N; i++)
        {
            double t;
            cin>>t;
            len[i]=t*100.0;
        }
        sort(len,len+N);//排序,直接找最大值
        l=1,r=len[N-1];
        int ans=0;//答案
        while(l<=r)
        {
            int mid=(l+r)/2;
            int cnt=0;//计数器,是否大于等于K
            for(int i=0; i<N; i++)
                cnt+=len[i]/mid;
            if(cnt>=K)
            {
                l=mid+1;
                ans=max(ans,mid);//找最大值
            }
            else
                r=mid-1;
        }
        printf("%.2f\n",(double)ans/100.0);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/sky-stars/p/11295983.html

时间: 2024-10-12 05:37:42

【POJ - 1064】Cable master(二分)的相关文章

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 (二分答案)

题目链接: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;

[POJ] 1064 Cable master (二分查找)

题目地址:http://poj.org/problem?id=1064 有N条绳子,它们的长度分别为Ai,如果从它们中切割出K条长度相同的绳子,这K条绳子每条最长能有多长. 二分绳子长度,然后验证即可.复杂度o(nlogm) 1 #include<cstdio> 2 #include<iostream> 3 #include<string.h> 4 #include<algorithm> 5 #include<math.h> 6 #include

POJ 1064 Cable master (二分)

题意:给定 n 条绳子,它们的长度分别为 ai,现在要从这些绳子中切出 m 条长度相同的绳子,求最长是多少. 析:其中就是一个二分的水题,但是有一个坑,那么就是最后输出不能四舍五入,只能向下取整. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #include <cstdlib> #include &l

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

题目传送门 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 = 0x3f3f

(poj)1064 Cable master 二分+精度

题目链接:http://poj.org/problem?id=1064 Description Inhabitants of the Wonderland have decided to hold a regional programming contest. The Judging Committee has volunteered and has promised to organize the most honest contest ever. It was decided to conn

[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