2014-2015 ACM-ICPC, NEERC, Southern Subregional Contest F. Ilya Muromets

来源:互联网 发布:2016天猫淘宝各数据 编辑:程序博客网 时间:2024/05/01 16:08
//写这题的原因是:我不知道竟然还有这种解法,//首先k*2>=n肯定输出sum[n];否则,//我们从k+1开始遍历,找到k+i左边k个连续的最大值//以i为起点连续的k个值的和相加,取个最大值就是我们要的解//这题我真的是一开始没有思路,最后才知道,原来两边分开的情况//和连续的两个k是一样的。不多说了,多练吧。。。#include <algorithm>#include <bitset>#include <cassert>#include <cctype>#include <cfloat>#include <climits>#include <cmath>#include <complex>#include <cstdio>#include <cstdlib>#include <cstring>#include <ctime>#include <deque>#include <functional>#include <iostream>#include <list>#include <map>#include <numeric>#include <queue>#include <set>#include <stack>#include <vector>#define ceil(a,b) (((a)+(b)-1)/(b))#define endl '\n'#define gcd __gcd#define highBit(x) (1ULL<<(63-__builtin_clzll(x)))#define popCount __builtin_popcountlltypedef long long ll;using namespace std;const int MOD = 1000000007;const long double PI = acos(-1.L);template<class T> inline T lcm(const T& a, const T& b) { return a/gcd(a, b)*b; }template<class T> inline T lowBit(const T& x) { return x&-x; }template<class T> inline T maximize(T& a, const T& b) { return a=a<b?b:a; }template<class T> inline T minimize(T& a, const T& b) { return a=a<b?a:b; }template<class T> inline void unify(const T& c) {  c.resize(unique(c.begin(), c.end())-c.begin());}const int maxn = 2e5+10;ll a[maxn];ll sum[maxn];ll l[maxn];ll r[maxn];int n,k;int main(){    freopen("G:\\Code\\1.txt","r",stdin);    while(scanf("%d%d",&n,&k)!=EOF){        memset(sum,0,sizeof(sum));        memset(l,0,sizeof(l));        memset(r,0,sizeof(r));        for (int i=1;i<=n;i++)            scanf("%I64d",&a[i]);//        for (int i=1;i<=n;i++)//            printf("%d ",a[i]);//        puts("");        for (int i=1;i<=n;i++)            sum[i] = sum[i-1] + a[i];        if (k*2>=n){            printf("%lld\n",sum[n]);            return 0;        }        ll ans = sum[2*k];        ll t = sum[k];        for (int i=k+1;i+k<=n;i++){            t = max (t,sum[i]-sum[i-k]);            ans = max(ans,t+sum[i+k]-sum[i]);        }        printf("%lld\n",ans);    }    return 0;}

0 0
原创粉丝点击