CodeForces 1009C贪心

题意给你一个空数组,让你完成m个操作,问你最大的平均值

其实就是只和d有关,d为正数,就选择i为1,使得d[i]*((1+n/2)*(n/2))值最大

d为负数,i为n/2,使得d[i]*(n/2*(n/2-1)+n/2)值最小

#include<bits/stdc++.h>
#define ll long long
#define UP(x,y) for(int x=1;x<=y;x++)
#define in(x) scanf("%lld",&x)
#define in2(x,y) scanf("%lld%lld",&x,&y)
#define in3(x,y,z) scanf("%lld%lld%lld",&x,&y,&z)
#define mem(x,y) memset(x,y,sizeof(x))
using namespace std;
const int maxn=100005;
ll a[maxn];
ll sum;
ll x[maxn],d[maxn];
int main()
{
    ll n,m;
    mem(a,0);
    in2(n,m);
    UP(i,m)
    {
        in(x[i]);
        in(d[i]);
    }
    sum=0;
    UP(i,m)
    {
        if(d[i]>=0)
        {
            sum=sum+x[i]*n+d[i]*((n-1)*n)/2;
        }
        else
        {
            if(n%2==1)
            {
                sum=sum+x[i]*n+d[i]*((1+n/2)*(n/2));
            }
            else
            {
                sum=sum+x[i]*n+d[i]*(n/2*(n/2-1)+n/2);
            }
        }
    }
    printf("%lf",sum*1.0/n);

    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Json-Five/p/9763363.html