您的位置:首页 > 其它

CodeChef December Challenge 2013 解题报告

2013-12-08 01:19 369 查看
Problem A Magic Pairs

水体一枚,其实就是求1-n-1的和。用long long 就行。

代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
#include <utility>
#define LEN 100100
#define INF 0x7fffffff
#define ll long long

using namespace std;

int n, k;
ll num[LEN], pre[LEN], las[LEN];

void init(){
memset(pre, 0 ,sizeof pre);
memset(las, 0 ,sizeof las);
for(int i=1; i<=n; i++){
pre[i] = pre[i-1]<0?num[i]:pre[i-1]+num[i];
}
pre[0] = -INF;
for(int i=1; i<=n; i++)pre[i] = max(pre[i-1], pre[i]);
for(int i=n; i>=1; i--){
las[i] = las[i+1]<0?num[i]:las[i+1]+num[i];
}
las[n+1] = -INF;
for(int i=n; i>=1; i--)las[i] = max(las[i+1], las[i]);
}

int main()
{
//    freopen("in.txt", "r", stdin);

int T;
scanf("%d", &T);
while(T--){
scanf("%d%d", &n, &k);
for(int i=1; i<=n; i++){
cin >> num[i];
}
init();
ll ans = -INF;
for(int i=1; i+k<n; i++){
ans = max(ans, pre[i]+las[i+k+1]);
}
cout << ans << endl;
}
return 0;
}


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