#A. 国会山的陷落

    Type: Default 1000ms 20MiB

国会山的陷落

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

背景

川普来了!米利坚太平了!川普来了!青天就有了!某年某月某六号,一个神奇的团体苦米利坚久矣,准备进京勤王,清君侧。国会里的佩洛东慌了,她赶紧逃命,走之前要求小L尽最大努力保住她电脑里的机密文件,就匆匆逃离了现场。可她不知道的是,小L其实是懂王的心腹,是安插在皿煮党身边的一个卧底,并且小L早就知道了佩洛东电脑机密文件的密码的破解方法,为了偷出机密文件,并让更少的人知道此事,以便小L继续潜伏,虽然是一伙的,但小L不能让神奇组织发现小L的事,所以小L时间不多了!于是他打电话向身为计算机高手的你求助,希望你能写出程序,帮助他快速破解密码。

题目描述

密码是一排数字,而随机个数数字上有着黄色的高亮,已知解开密码的方法是:高亮的数字之和在可操作条件下最大,这个最大的数就是密码。小L只能进行将高亮往左滑动一格的操作,一个高亮数字只能移动一次,但是可以移动多个高亮数字,但肉眼观察显然太慢了,所以需要你直接告诉他,可得到的最大数字。

你可能会用到

前缀和:顾名思义,是要求前缀的总和,什么是前缀,对于一个存放数字的数组而言,前缀就是指的数组的前k项,因此对应的前缀和就是数组前k项的和。前缀和一般用来求数组中连续段子数组的值的和,类似于等差数列中利用等差数列的和来求某一段子数列的和,对于一个前缀和处理过的数组:

求原数组第i个数字通过公式:x=a[i]-a[i-1];

求原数组第i到第j个数字的和通过公式:x=a[j]-a[i-1];

(此处的a[]数组,代表前缀和处理过的数组)

前缀和处理代码

for (int i = 1; i <= n; i ++ ){
	cin >> a[i];
	s[i] = s[i - 1] + a[i];
}

输入描述

第一行一个整数t,代表有t组输入(1t10 1 \leq t \leq 10

对于每一组数据,第一行一个整数n,代表一排中有n个数字(1n2105 1 \leq n \leq 2·10^5

第二行输入一串有n个字符的字符串,字符串由'0'和'1'构成,如果第i个字符是'1',则代表第i个数字是被选中的高亮状态,如果第i个字符是'0',则代表第i个数字未被选中(第i个数字指藏有密码信息的那一串数字的第i个)

第三行有一串数字a1,a2,a3,...,an,代表藏有密码信息的一排数字(1ai104 1 \leq ai \leq 10^4

输出描述

对于每一组数据,输出一个密码

Samples

4
5
01110
10 5 8 9 6
6
011011
20 10 9 30 20 19
4
0000
100 100 100 100
4
0111
5 4 5 1

27
80
0
14

样例解释

第一组数据

5
01110
10 5 8 9 6

可以将第一个1往前移动一个这样高亮数字就变成了 10110,这时候计算所有高亮数字和则为10+8+9=27

第二组数据

5
011011
20 10 9 30 20 19

将前两个1都往前移动一格,再将后两个1都往前移动一格,这样高亮数字就变成了110110,这时候对所有高亮数字求和则为20+10+30+20=80

Limitation

2s, 20 megabytes for each test case.

新生周赛第七场(DIV. 3)

Not Attended
Status
Done
Rule
IOI
Problem
6
Start at
2022-12-25 19:30
End at
2022-12-25 21:30
Duration
2 hour(s)
Host
Partic.
35