zoukankan      html  css  js  c++  java
  • BZOJ 4757 Building a Tall Barn

    。。。。。。。。

    。。。。。。。。

    深感佩服。

    对每个位置,每加一头奶牛的偏移量是a[i]/(c*(c+1))。

    然后二分所有位置的最小值,对每个位置解出c,如果所有c的和<=k那么允许更新答案。

    你说不对?

    出题人告诉你答案四舍五入。。本来一个不是很对的算法就这么过掉了。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #define maxn 100050
    #define eps 1e-13
    using namespace std;
    long long n,k,a[maxn],mx=0;
    double l,r,mid,ans=0;
    bool check(double x)
    {
        long long ret=0;
        for (long long i=1;i<=n;i++)
        {
            double c=(sqrt(1+(double)4*a[i]/x)-1)/2+1;
            ret+=(long long)c;
        }
        return ret<=k;
    }
    int main()
    {
        scanf("%lld%lld",&n,&k);
        for (long long i=1;i<=n;i++)
        {
            scanf("%lld",&a[i]);
            mx=max(mx,a[i]);
        }
        l=0;r=mx;
        while (r-l>eps)
        {
            mid=(l+r)/2;
            if (check(mid)) r=mid;
            else l=mid;
        }
        if (check(l))
        {
            for (long long i=1;i<=n;i++) 
            {
                long long c=(long long)(sqrt(1+(double)4*a[i]/l)-1)/2;
                ans+=(double)a[i]/c;
            }
        }
        else
        {
            for (long long i=1;i<=n;i++) 
            {
                long long c=(long long)(sqrt(1+(double)4*a[i]/r)-1)/2+1;
                ans+=(double)a[i]/c;
            }
        }
        printf("%.0lf
    ",ans);
        return 0;
    }
  • 相关阅读:
    G a+b+c+d=?
    H Kuangyeye and hamburgers
    python 实现加法
    高精度板子
    angular项目一
    angular大牛的博客
    autocomplete
    angular的 表单
    快捷方式控制台调试each这种方法的时候怎么停
    自己练习的一些应该熟记的代码
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/6404761.html
Copyright © 2011-2022 走看看