P1577 切绳子(二分)

思路:先来分析一下数据范围,是1e4个数据,但是,是double类型,结果不超过0.01那么在绳子最大的情况下,单纯的找正确答案暴力的话就是1e7的时间复杂度,再乘上1e4的数据,这样肯定不行。那么很容易想到二分,在找答案时使用二分的话就可以让时间复杂度下降到log(1e7)这是一个比较小的值,起码不超过128,这样,我们的时间复杂度就降了下来了。

  检验函数,就是单纯的假设答案x,去除以每个绳子看看能得到最后有几段sum, 如果sum>=k则说明,是可行的。至于是不是最后答案,这要交给二分模板。

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;

const int maxn = 1e4 + 10;
int n, k, a[maxn], maxx, ans, mid;
double p;

bool check(int x){
    int sum = 0;
    for (int i = 1; i <= n; ++i)
        sum += a[i] / x;
    return sum >= k;
}

void half(){
    int l = 0, r = maxx;
    while (l <= r){
        mid = (l + r) >> 1;
        if (check(mid)){ l = mid + 1; }
        else r = mid - 1;
    }
    ans = r;
}

int main(){
    cin >> n >> k;
    for (int i = 1; i <= n; ++i)
        cin >> p, a[i]=p*100,maxx=max(maxx, a[i]);
    half();    //二分
    printf("%.2lf\n", (double)ans / 100);
}

原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/10459801.html

时间: 2024-09-29 17:07:21

P1577 切绳子(二分)的相关文章

P1577 切绳子

P1577 切绳子 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位. 输入输出格式 输入格式: 第一行两个整数N和K,接下来N行,描述了每条绳子的长度Li. 输出格式: 切割后每条绳子的最大长度. 输入输出样例 输入样例#1: 4 11 8.02 7.43 4.57 5.39 输出样例#1: 2.00需要高精处理,不能while(l<=r),用for枚举100次高精就够了 1 #include<cstdio

luogu P1577 切绳子

题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位. 输入输出格式 输入格式: 第一行两个整数N和K,接下来N行,描述了每条绳子的长度Li. 输出格式: 切割后每条绳子的最大长度. 输入输出样例 输入样例#1: 4 11 8.02 7.43 4.57 5.39 输出样例#1: 2.00二分答案+检验,卡精度,好恶心 #include<cstdio> #include<cmath> int k,n;

洛谷—— P1577 切绳子

https://www.luogu.org/problemnew/show/P1577 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位. 输入输出格式 输入格式: 第一行两个整数N和K,接下来N行,描述了每条绳子的长度Li. 输出格式: 切割后每条绳子的最大长度. 输入输出样例 输入样例#1: 复制 4 11 8.02 7.43 4.57 5.39 输出样例#1: 复制 2.00 说明 对于100%的数据 0

洛谷1577 1297切绳子(二分答案)

题目描述 Wonderland居民决定举行一届地区性程序设计大赛.仲裁委员会志愿负责这次赛事并且保证会组织一次有史以来最公正的比赛.为此,所有参赛者的电脑和网络中心会以星状网络连接,也就是说,对每个参赛者,组委会会用一根长度一定的网线将他的计算机与中心连接,使得他们到网络中心的距离相等. 为了买网线,组委会与当地的网络公司联系,要向他们购买一定数目的等长网线,这些网线要尽可能的长,使得组织者可以让选手们彼此远离. 于是公司指派管理网线事务的负责人解决此事.负责人清楚地知道仓库里每根网线的长度(精

二分求解 切绳子 (浮点数易出现精度问题)

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

推荐题目

二分 P2678 跳石头 P2440 木材加工 P1873 砍树 P1577 切绳子 P1824 进击的奶牛 P1316 丢瓶盖 UVA1555 Garland P1257 平面上的最接近点对 P1429 平面最近点对(加强版)(未完成) P1182 数列分段"Section II" P1281 书的复制(二分做法和上题一样,只是输出值变成了输出划分方式) 递推 P2386 放苹果 P1025 数的划分 DP&&MS P1091 合唱队形 P1140 相似基因 P144

基础算法总结

位运算 算术位运算 包括:按位与(&).按位或(|).按位异或(^).按位取反(~).按位左移(<<).按位右移(>>) 1 &(and) 对两个数进行操作,然后返回一个新的数,这个数的每个位都需要两个输入数的(同一位)都为1时才为1 举个例子: 1 1 1 1 1 0 0 0 1 1 1 0 =0 0 1 1 1 0 2 |(or) 比较两个数,然后返回一个新的数,这个数的每一位设置1的条件是两个输入数的同一位都不为0(即任意一个为1,或都为1) 举个例子: 1

算法91----切绳子

不能一.题目:切绳子 有n根绳子,第i根绳子长度为Li,现在需要M根等长的绳子,你可以对n根绳子进行任意裁剪(不能拼接),计算出这m根绳子最长的长度是多少. 输入:第一行2个正整数N,M,表示N根原始的绳子,和最终需要M根绳子数 第二行包含N 个整数,第i个整数Li表示第i根绳子的长度 其中,1≤N.M≤100000,0 <Li<1000000000 输出一个数字,表示裁剪后最长的长度,保留两位小数. 输入: 3 4 3 5 4 输出: 2.5 二.思路: 在绳子长度中进行二分查找最长的长度,

Html5 移动游戏开发

有很多游戏采用H5技术开发,比如三国来了.巴哈姆特之怒.切绳子等.我们公司也有多款游戏用H5开发,H5开发成本低,效率高,方便做自动更新,可移植性好.受益于H5技术,我们公司的很多产品都很方便跨平台. 早在2012年,我就很荣幸负责技术攻关,把我们的游戏移植到win8和wp8平台,当时在国内的win8和wp8平台是领先的.我们的一款游戏,跨ios.android.win8.wp8和黑莓10五大移动平台,这在国内肯定是唯一的吧? <Infinity Lands>喜获黑莓优秀大奖 也得益于在win