您的位置:首页 > 其它

每日打卡 2017.04.16 前缀和

2017-04-16 23:13 197 查看
CF 632B

简单的前缀和、后缀和

#include<cstdio>
#include<cstring>
#include<iostream>
typedef long long LL;
using namespace std;

const int MAXN = 500000 + 5;
int n;
LL a[MAXN];
LL pre[MAXN];
LL apre[MAXN];
char str[MAXN];

LL bpre(int k)
{
return pre[k] - apre[k];
}

LL suf(int k)
{
return pre
- pre[k-1];
}

LL asuf(int k)
{
return apre
- apre[k-1];
}

LL bsuf(int k)
{
return suf(k) - asuf(k);
}

int main(){
//freopen("input.txt", "r", stdin);
scanf("%d", &n);
for(int i = 1; i <= n; i++)
{
scanf("%lld", &a[i]);
pre[i] = pre[i-1] + a[i];
}
scanf("%s", str);
for(int i = 0; i < n; i++)
{
apre[i+1] = apre[i];
if(str[i] == 'A') apre[i+1] += a[i+1];
}
LL ans = -99999999, tmp;
for(int i = 1; i <= n; i++)
{
tmp = apre[i] + bsuf(i);
if(tmp > ans) ans = tmp;
}
for(int i = 1; i <= n; i++)
{
tmp = bpre(i) + asuf(i);
if(tmp > ans) ans = tmp;
}
cout << ans << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: