冬天与火锅更配
描述
冬日里的一抹暖阳总是能给人们留下深刻的记忆,人们喜爱冬天的太阳,就跟人们喜爱冬天的火锅一般。
寒冷的冬天总会让人想起火锅,最近小Z特别想去吃火锅,刚好某家转转火锅刚开业有活动,有n盘火锅围成一个圈,第一盘和最后一盘是相连的,每一盘火锅都有一个价值a[i],现在可以吃连续的m盘火锅,小Z想知道他所吃的那连续的m盘火锅的最大价值可以是多少?你能帮帮憨憨的小Z吗。
格式
输入格式
第一行数入两个整数n,m(1<=m<=n<=2000000),分别表示火锅的盘数和可以吃的连续的盘数
第二行输入n的数ai,分别表示每一盘火锅的价值
输出格式
输出一个整数,表示连续m盘火锅的最大价值
样例
样例输入
5 3
6 1 2 5 3
样例输出
14
题目意思是围成一个圈,圈的话用代码实现比较麻烦,所以就把前面的m个元素接在了最后,同时算出前面m的元素的和,又因为“尺”的大小没有变,一直是m长,所以 每次加一个数,同时减去前面的第m个数,得到更一段的值,再与前面得到的值比较,最后输出最大的值。
代码如下:
#include<stdio.h>
long long int a[4100100];//结合题目可得数组最大为2000000+2000000=4000000,为了保险起见开大一点
int main()
{
long long int m,n;
while(~scanf("%lld%lld",&n,&m))
{
long long int i,j,k,t,sum=0;
i=j=k=t=sum=0;
for(i=0;i<n;i++)
scanf("%lld",&a[i]);
for(i=0;i<m;i++)
{
a[n+i]=a[i];//将前面的m个元素接在后面
t=t+a[i];//计算前m个元素的和
}
while(i<n+m)
{
if(sum<t) sum=t;//将最大的和赋给sum
t=t+a[i];
t=t-a[i-m];//这里就是加上一个数,再减去前面的一个数,使得“尺”的大小一直为m
i++;
}
printf("%lld\n",sum);
}
return 0;
}