• CF792E Colored Balls


    题目大意:将n个数分解成若干组,如4 = 2+2, 7 = 2+2+3,保证所有组中数字之差<=1。

    首先我们能想到找一个最小值x,然后从x+1到1枚举并check,找到了就输出。这是40分做法。

    能不能优化?我们发现,若k合法,那么x%k==0或x%(k+1)==0或x%(k-1)==0。

    所以枚举倍数就行了,利用贪心找到了就输出。

    代码:

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    #define ll long long
    int n;
    ll a[505],mn=0x3f3f3f3f;
    bool cmp(ll x,ll y)
    {
        return x<y;
    }
    void check(ll k)
    {
        if(!k)return ;
        ll ret = 0;
        for(int i=1;i<=n;i++)
        {
            if(a[i]<k-1)return ;
            int cnt = a[i]/k+(a[i]%k!=0);
            if(a[i]%k==0)
            {
                ret+=cnt;
                continue;
            }
            if(k*cnt-a[i]>cnt)return ;
            ret+=cnt;
        }
        printf("%I64d
    ",ret);
        exit(0);
        return ;
    }
    int main()
    {
    //    freopen("C.in","r",stdin);
    //    freopen("C.out","w",stdout);
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%I64d",&a[i]);
            mn=min(mn,a[i]);
        }
        for(int i=1;i<=mn;i++)
        {
            check(mn/i+1);
            check(mn/i);
            check(mn/i-1);
        }
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
  • 相关阅读:
    context-annotation
    bean-annotation
    K-means算法
    基于概率的分类-贝叶斯分类
    Application
    ConfigurableApplicationContext
    相关性分析
    方差分析
    Java 大写金额转换成数字
    linux 遍历文件添加index
  • 原文地址:https://www.cnblogs.com/LiGuanlin1124/p/9739139.html
Copyright © 2020-2023  润新知