F - Ilya Muromets-

来源:互联网 发布:mac安装jdk1.8教程 编辑:程序博客网 时间:2024/05/02 13:52

一开始算法就错了

错误地认为是  先找到一个max连续k区间 再找一个即可。。。。(这也太简单了吧)

实际是 要找到两个连续k区间的和最大。。两者是不同的。。。。让我发现区别的样例是这个

10 4
38 11 48 90 87 4 90 82 9 85

答案应该是 除去38 和4 之外的数只和

#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <algorithm>#include <iostream>#include <queue>#include <map>#include <list>#include <fstream>#include <vector>using namespace std;__int64 tm[2*100000+5]; __int64 big(__int64 a,__int64 b){if (a<b)return b;return a;}int main(){ __int64 n,k;scanf("%I64d %I64d",&n,&k);__int64 tmp;tm[0]=0;__int64 i;for (i=1;i<=n;i++){scanf("%I64d",&tmp);tm[i]+=tm[i-1]+tmp;} if (n<=2*k){printf("%I64d\n",tm[n]);return 0;} __int64 ans=tm[2*k];__int64 max=tm[k];for (i=k+1;i<=n-k;i++){max=big(max,tm[i]-tm[i-k]);ans=big(ans,tm[i+k]-tm[i]+max);}printf("%I64d\n",ans);return 0; }  


0 0
原创粉丝点击