百練1064網線主管 含詳細思路

題目連接:http://bailian.openjudge.cn/p...ios

思路:
        須要的等長網線數量C已知,要求儘量長,那麼咱們能夠列舉全部網線可能的長度len(0,max] , 計算出每種長度下網線的數量,時間複雜度爲 O(max*n)。爲了加快計算,咱們在列舉網線長度時,採用二分法,假如在 len下算出的網線數量c < C, 那麼就取一個更小的len嘗試,反之取更大的len嘗試,最優解L 知足 c(L) >= C, c(L+1) < C.spa

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define N 0x3f3f3f3f
using namespace std;
int a[10010];
int b[10010];
int n,m;
int find(int x)
{
    int h=0;
    for(int i=1;i<=n;i++)
    {
        h=h+a[i]/x;
    } 
    return h;
}
int main()
{
 
    cin>>n>>m;
    b[1]=0;
    for(int i=1;i<=n;i++)
    {
        double w;
        cin>>w;
        a[i]=w*100;
        b[2]=max(b[2],a[i]);    
    } 
    int l=0,r=b[2];
    while(l<=r)
    {
        int mid=(l+r)/2;
        if(mid==0)
        {
        printf("0.00");
        return 0;
        }
        if(find(mid)<m)
        {
            r=mid-1;    
        }
        else
        l=mid+1;
    }
    printf("%.2lf",(l-1)/100.0);
}

效率:
提交人 班級 結果 內存 時間 代碼長度 語言 提交時間code

Accepted    672kB    49ms    575 B    G++
相關文章
相關標籤/搜索