题解 AT1894 【総和】

· · 题解

这个题当然可以用暴力做,但是我们观察一下……

a[i]被加的次数为min(min(i,n-i+1),min(m,n-m+1))

所以就OK了。

#include<bits/stdc++.h>
using namespace std;
long long n,m,a,b,tot;
int main(){
    cin>>n>>m;b=n-m+1;
    for(long long i=0;i^n;i++)
    cin>>a,tot+=a*(min(min(i+1,n-i),min(m,b)));
    cout<<tot<<endl;
    return 0;
}