CF2187E.Doors and Keys

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

n+1n+1 个房间排成一排,从左到右编号为 11n+1n+1。还有 nn 扇门,编号为 11nn,第 ii 扇门连接房间 ii 和房间 i+1i+1。每扇门 ii 关联一个非负整数 aia_i

你会得到一个长度为 nn 的二进制字符串 ss(只包含 0011)。对于每个 1in1 \le i \le n

  • 如果 si=1s_i=1,则房间 ii 初始时有一把钥匙。
  • 否则,房间 ii 没有钥匙。

在第 00 秒开始时,你在房间 11,所有门都是关闭的。对于每个 k0k \ge 0,在第 kk 秒内会依次发生以下事件:

  • 在第 kk 秒的开始时,所有 aj=ka_j=k 的门 jj 会自动打开。
  • 假设你当前在房间 ii
    • 如果你没有携带钥匙,且房间 ii 里至少有一把钥匙,你可以捡起一把钥匙并带在身上。
    • 如果你身上有钥匙,可以在房间 ii 丢下钥匙。
  • 在第 kk 秒的末尾:
    • 你可以向右走到房间 i+1i+1。如果门 ii 还未打开,必须携带钥匙才能通过,使用后该钥匙消耗,门也会随之打开。
    • 如果 i>1i>1,你也可以向左走到房间 i1i-1
    • 或者你可以停留在原房间 ii

任意一扇门,不论是自动打开还是用钥匙打开,一旦打开便永久保持开启。

你随时最多只能携带一把钥匙。虽然初始时每个房间最多只有一把钥匙,但在过程中,可能会有多个钥匙被放置在同一个房间。

对于每个 1in1 \le i \le n,请你求出从房间 11 到达房间 i+1i+1 所需要的最小秒数。注意,每个 ii 的答案互不相关。

^* 二进制字符串是指只包含 0011 的字符串。

输入格式

每组测试数据包含多组用例。第一行为测试用例数 tt1t1041 \le t \le 10^4)。接下来的每组用例描述如下:

每组用例的第一行为一个整数 nn1n2×1051 \le n \le 2 \times 10^5)——门的数量。

第二行有 nn 个整数 a1,a2,,ana_1,a_2,\dots,a_n0ai2×1050 \le a_i \le 2 \times 10^5)——每扇门对应的整数。

第三行为一个长度为 nn 的二进制字符串 ss

保证所有测试用例中 nn 的和不超过 2×1052 \times 10^5

输出格式

对于每个测试用例,输出 nn 个整数,第 ii 个整数表示到达房间 i+1i+1 所需的最小秒数。

输入输出样例

  • 输入#1

    5
    1
    0
    0
    1
    2
    0
    1
    114514
    1
    4
    0 9 10 9
    1101
    10
    0 1 4 2 3 14 10 18 7 25
    1110000001

    输出#1

    1 
    3 
    1 
    1 2 5 6 
    1 2 3 4 5 8 11 17 18 19

说明/提示

在第一个测试用例中,第 11 扇门会在第 00 秒开始时打开。你可以在第 00 秒末移动到房间 22,因此在第 11 秒到达房间 22

在第二个测试用例中,第 11 扇门会在第 22 秒开始时自动打开。你必须在房间 11 等待,直到在第 22 秒末移动到房间 22,因此在第 33 秒到达房间 22

在第三个测试用例中,你可以在房间 11 拿起钥匙,并在第 00 秒末用钥匙打开门 11,这样在第 11 秒到达房间 22

首页