题意给你一个空数组,让你完成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; }