您的位置:首页 > 其它

fzu 防守阵地 1

2017-02-15 16:25 127 查看
#include<stdio.h>
#include<string.h>
#define rr 1000000
int a[rr+5],sum[rr+5],ssum[rr+5];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
sum[0]=ssum[0]=0;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
sum[i]=sum[i-1]+a[i];
}
for(int i=1;i<=n;i++)
{
ssum[i]=ssum[i-1]+sum[i];
}
long long ans=0;
for(int i=m;i<=n;i++)
{
long long mid=0;
long long cha=ssum[i-1]-ssum[i-m-1];
mid=sum[i]*m-cha;
if(mid>ans)
ans=mid;
}
printf("%lld\n",ans);
}
}

处理前缀和

sum【1】=a[1]

sum[2]=a[1]+a[2];

sum[3]=a[1]+a[2]+a[3];

sum[4]=a[1]+a[2]+a[3]+a[4]

以样例为主

max=a[3]+2*a[4]+3*a[5];

a[5]=sim[5]-sum[4];

a[4]+a[5]=sum[5]-sum[3];

a[3]+a[4]+a[5]=sum[5]-sum[2];

max=(a[3]+a[4]+a[5])+(a[4]+a[5])+(a[5]);

=3*sum[5]-(sum[4]+sum[3]+sum[2])

为了节省时间我们对sum进行意思前缀和

ssum【i-1】-是ssum【i-m-1】;


防守阵地 I

 



FAQ | About | Google Group | Discuss | Author 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: