zoukankan      html  css  js  c++  java
  • 周六题目前四题详解

    B题题目是CodeForces - 1009C Annoying Present

    是一开始给我们一个长度为n的全0的数组,然后给我们m次变化,每次变化中给我们一个xi和di,每次的操作是,数组上每个数字都加上xi然后再加上di乘以dist| i - j |,

    因为每个数字都要处理,所以我们可以直接处理整个数组,不管d是什么值,我们首先每次sum都是要加上xi*n的,接着关于d,如果他是正数的话,相当于每个数都加上

    一个正数,那我们要保证它最大,我们就从第一位开始加就是d乘以0+1+2+.....+(n-1)所以就是d乘以n*(n-1)/ 2;如果他是负数,那我们就选择放在中间,这样数字就会尽可能小,

    然后判断一下奇数还是偶数就好了,如果是奇数,我们假设是5 就是2+1+0+1+2,相当于(n+1)/2*(n-1)/2,如果是偶数,假设是6,就是2+1+0+1+2+3,相当于n*n/4;

    这就是我们本题的解法了。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #define maxn 110000
    using namespace std;
    #define ll long long 
    int gi() {
        int x = 0; char c = getchar();
        while (c < '0' || c > '9') c = getchar();
        while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
        return x;
    }
    #define mod 998244353
    //123****123
    
    int main()
    {
        ll n, m;
        cin >> n >> m;
        ll sum = 0;
        while (m--)
        {
            ll x, d;
            cin >> x >> d;
            
            if (d > 0)
            {
                sum += x * n + (n - 1) * n / 2 * d;
            }
            else
            {
                if (n % 2 == 1)
                {
                    sum += x * n + (n + 1) / 2 * (n - 1) / 2*d;
                }
                else
                {
                    sum += x * n + n * n / 4*d;
                }
            }
            
        }
        printf("%.13f
    ", (double)sum/n);
    }

    C题题目是 CodeForces - 965C Greedy Arkady

    题目意思是给我们n个糖果,k个人,让我们选择一个x,每次分配x个糖果给每个人,要使第一个拿糖果的人,能够拿到最多的糖果(对于他而言),x有上限M,同时

    分配的次数也有限制不能多于D次。

    思路:我的想法是每次分配x个糖果,那么相当于我们可以分配m圈,我们只要保证第一个人拿到的数量是m+1圈就可以找一个最大值,保证他的数量最大了,那我们就每次

    遍历圈数,看看能不能满足条件,然后取最大值,然后本题有一个坑点,如果你是每次遍历的话,会wa18组,因为他给我们的测试样例为

    1000000000000000000 1000000000000000000 1000 1000
    然后我们就会出现后面n/(k*(m)+1)的结果为正,所以就会出现错误,这里我们加一个判断,如果结果为0了,后面就不用判断了就结束了。
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #define maxn 110000
    using namespace std;
    #define ll long long 
    int gi() {
        int x = 0; char c = getchar();
        while (c < '0' || c > '9') c = getchar();
        while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
        return x;
    }
    #define mod 998244353
    //123****123
    
    int main()
    {
        ll n, k, m, d;
        cin >> n >> k >> m >> d;
        ll maxx = 0;
        //cout << n / (k * 19 + 1) << endl;
        for (ll i = 1; i <= d; i++)
        {
            
            ll x = (n) / ( (i - 1)*k + 1);
            if (x == 0)break;
            //cout << x << endl;
            if (x > m)
            {
                x = m;
            }
            //cout << maxx << endl;
            maxx = max(maxx, x * i);
        }
        cout << maxx << endl;
    }
     
  • 相关阅读:
    逼哥
    作业
    malloc的底层实现
    docker基本使用
    对mudo中noncopyable类的理解
    整理
    替换war包中的文件
    SpringMVC(1):SpringMVC入门
    MySQL(5):安装MySQL
    MySQL(4):卸载MySQL
  • 原文地址:https://www.cnblogs.com/csxaxx/p/12772748.html
Copyright © 2011-2022 走看看