Educational Codeforences Round 9 B

题目门


【题意】

输入n,代表有n个数,然后再输入n个力量,在输入长度为n的字符串(字符串只包括A或

B),Bob 能够选择该字符串的某一前缀或者后缀,或者什么也不做,将其反转(如果是

A,则变成B,如果是B 则变成A),最后Bob的力量是所有B对应的力量和。输出最大的力

量和!


【解题思路】


因为是前缀或者后缀,所以直接扫描终点即可!然后区间内的把A的力量加起来,区间外的

把B的力量加起来,比较最大值即可!

【AC代码】

#include <bits/stdc++.h>
using namespace std;
#define CLE(a,b) memset(a,b,sizeof(a))
#define MEC(a,b) memcpy(a,b,sizeof(a))
#define ll long long
using namespace std;
const int nn = 500010;
int a[nn];
char s[nn];
ll sum1[nn],sum2[nn];

int main()
{
    int n;
    cin>>n;
    for(int i=1; i<=n; i++)cin>>a[i];
    scanf("%s",s+1);
    CLE(sum1,0);
    CLE(sum2,0);
    for(int i=1; i<=n; i++)
    {
        sum1[i] = 0,sum2[i] = 0;
        sum1[i] += sum1[i-1],sum2[i] += sum2[i-1];
        if(s[i]=='A')sum1[i] += a[i];
        else sum2[i] += a[i];
    }
    ll ans = -1;
    ll len = n;
    ll tsum = 0;
    for(int i=1; i<=n; i++)//change prefix.
    {
        tsum = sum1[i] + sum2[len] - sum2[i];
        ans = max(ans,tsum);
    }
    for(int i=len; i>0; i--)//change suffix.
    {
        tsum = sum2[i] + sum1[len] - sum1[i];
        ans = max(ans,tsum);
    }
    cout<<ans<<endl;
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值