B. Alice, Bob, Two Teams



time limit per test



memory limit per test



input



output



n pieces, and the i-th piece has a strength pi.

The way to split up game pieces is split into several steps:

  1. A and B. This can be seen as writing the assignment of teams of a piece in an n character string, where each character is A or B.
  2. A to B and B to A). He can do this step at most once.
  3. A and Bob will get all the pieces marked B.

The strength of a player is then the sum of strengths of the pieces in the group.

Given Alice's initial split into two teams, help Bob determine an optimal strategy. Return the maximum strength he can achieve.



Input



n (1 ≤ n ≤ 5·105) — the number of game pieces.

n integers pi (1 ≤ pi ≤ 109) — the strength of the i-th piece.

n characters A or B



Output



a



Examples



input



5 1 2 3 4 5 ABABA



output



11



input



5 1 2 3 4 5 AAAAA



output



15



input



1 1 B



output



1



Note



In the first sample Bob should flip the suffix of length one.

5.

In the third sample Bob should do nothing.


大体题意:

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

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

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

量和!


思路:


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

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


技巧:


可以开两个数组,利用容斥定理,记录A的力量和,和B的力量和,这样扫描终点只需要相减

数组即可!


最后记得用long long 存啊!

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 500000 + 100;
const int maxt = 100 + 10;
const int INF = 1e8;
const double eps = 1e-8;
const double pi = acos(-1.0);
typedef long long ll;
typedef unsigned long long llu;
int a[maxn];
char s[maxn];
ll suma[maxn];
ll sumb[maxn];
int main()
{
    int n;
    while(scanf("%d",&n) == 1){
        for (int i = 1; i <= n; ++i){
            scanf("%d",&a[i]);
        }
        scanf("%s",s+1);
        for (int i = 1; i <= n; ++i){
            suma[i]=sumb[i]=0;
            suma[i]+=suma[i-1];
            sumb[i]+=sumb[i-1];
            if (s[i] == 'A')suma[i]+=a[i];
            else sumb[i]+=a[i];
        }
        int len = n;
        ll sum = -1;
        ll tsum=0;
        for (int i = 1; i <= n; ++i){
            tsum = suma[i] + sumb[len]-sumb[i];
            sum = max(sum,tsum);
        }
        for (int i = len; i > 0; --i){
            tsum = suma[len]-suma[i] + sumb[i];
            sum = max(sum,tsum);
        }
        printf("%I64d\n",sum);
    }
    return 0;
}