【CodeForces】616G

来源:互联网 发布:云安全软件好用吗 编辑:程序博客网 时间:2024/06/11 16:52

http://codeforces.com/problemset/problem/632/B

n个物品,每个物品有一个值且一个物品属于A或属于B。
现在选择一个前缀或者后缀,将A改成B,将B改成A。
求属于B的物品的值最多是多少?

#include <bits/stdc++.h>using namespace std;const int maxn=5e5+5;int n;int a[maxn];string s;long long suf[maxn];long long pre[maxn];long long sum,ans;int main(){    cin >> n;    for (int i=1;i<=n;i++){        cin >> a[i];    }    cin >> s;    for (int i=0;i<n;i++){        if (s[i]=='B') ans+=a[i+1];    }    pre[0]=ans;    suf[n+1]=ans;    for (int i=1;i<=n;i++){        if (s[i-1]=='A') pre[i]=pre[i-1]+a[i];        else             pre[i]=pre[i-1]-a[i];        ans=max(ans,pre[i]);    }    for (int i=n;i>=1;i--){        if (s[i-1]=='A') suf[i]=suf[i+1]+a[i];        else             suf[i]=suf[i+1]-a[i];        ans=max(ans,suf[i]);    }    cout << ans << endl;}