CF2187E.Doors and Keys
NOI/NOI+/CTSC
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
有 n+1 个房间排成一排,从左到右编号为 1 到 n+1。还有 n 扇门,编号为 1 到 n,第 i 扇门连接房间 i 和房间 i+1。每扇门 i 关联一个非负整数 ai。
你会得到一个长度为 n 的二进制字符串 s(只包含 0 或 1)。对于每个 1≤i≤n:
- 如果 si=1,则房间 i 初始时有一把钥匙。
- 否则,房间 i 没有钥匙。
在第 0 秒开始时,你在房间 1,所有门都是关闭的。对于每个 k≥0,在第 k 秒内会依次发生以下事件:
- 在第 k 秒的开始时,所有 aj=k 的门 j 会自动打开。
- 假设你当前在房间 i:
- 如果你没有携带钥匙,且房间 i 里至少有一把钥匙,你可以捡起一把钥匙并带在身上。
- 如果你身上有钥匙,可以在房间 i 丢下钥匙。
- 在第 k 秒的末尾:
- 你可以向右走到房间 i+1。如果门 i 还未打开,必须携带钥匙才能通过,使用后该钥匙消耗,门也会随之打开。
- 如果 i>1,你也可以向左走到房间 i−1。
- 或者你可以停留在原房间 i。
任意一扇门,不论是自动打开还是用钥匙打开,一旦打开便永久保持开启。
你随时最多只能携带一把钥匙。虽然初始时每个房间最多只有一把钥匙,但在过程中,可能会有多个钥匙被放置在同一个房间。
对于每个 1≤i≤n,请你求出从房间 1 到达房间 i+1 所需要的最小秒数。注意,每个 i 的答案互不相关。
∗ 二进制字符串是指只包含 0 或 1 的字符串。
输入格式
每组测试数据包含多组用例。第一行为测试用例数 t(1≤t≤104)。接下来的每组用例描述如下:
每组用例的第一行为一个整数 n(1≤n≤2×105)——门的数量。
第二行有 n 个整数 a1,a2,…,an(0≤ai≤2×105)——每扇门对应的整数。
第三行为一个长度为 n 的二进制字符串 s。
保证所有测试用例中 n 的和不超过 2×105。
输出格式
对于每个测试用例,输出 n 个整数,第 i 个整数表示到达房间 i+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
说明/提示
在第一个测试用例中,第 1 扇门会在第 0 秒开始时打开。你可以在第 0 秒末移动到房间 2,因此在第 1 秒到达房间 2。
在第二个测试用例中,第 1 扇门会在第 2 秒开始时自动打开。你必须在房间 1 等待,直到在第 2 秒末移动到房间 2,因此在第 3 秒到达房间 2。
在第三个测试用例中,你可以在房间 1 拿起钥匙,并在第 0 秒末用钥匙打开门 1,这样在第 1 秒到达房间 2。