CF1433B.Yet Another Bookshelf

传统题 时间 2000 ms 内存 256 MiB 3 尝试 1 已通过 1 标签

Yet Another Bookshelf

题目描述

有一个可以放下 nn 本书的书架。第 ii 个位置上如果有书,则 ai=1a_i = 1,否则 ai=0a_i = 0。保证书架上至少有一本书。

每次操作,你可以选择某个连续的全是书的区间 [l,r][l, r](即对于所有 lirl \le i \le r,都有 ai=1a_i = 1),并进行如下操作之一:

  • 向右移动 11 位:将区间内第 ii 个位置的书移动到 i+1i+1,对所有 lirl \le i \le r 都执行。仅当 r+1nr+1 \le nr+1r+1 位置没有书时,才能进行此操作。
  • 向左移动 11 位:将区间内第 ii 个位置的书移动到 i1i-1,对所有 lirl \le i \le r 都执行。仅当 l11l-1 \ge 1l1l-1 位置没有书时,才能进行此操作。

你的任务是,计算将书架上的所有书收集成一个连续区间(即没有空隙的区间)所需的最少操作次数。

例如,对于 a=[0,0,1,0,1]a = [0, 0, 1, 0, 1],书之间有空隙(a4=0a_4 = 0,而 a3=1a_3 = 1a5=1a_5 = 1);对于 a=[1,1,0]a = [1, 1, 0],书之间没有空隙;对于 a=[0,0,0]a = [0, 0, 0],同样没有空隙。

你需要回答 tt 组独立的测试用例。

输入格式

输入的第一行包含一个整数 tt1t2001 \le t \le 200),表示测试用例的数量。接下来是 tt 组测试用例。

每组测试用例的第一行包含一个整数 nn1n501 \le n \le 50),表示书架上的位置数。第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n0ai10 \le a_i \le 1),其中 ai=1a_i = 1 表示该位置有书,ai=0a_i = 0 表示该位置没有书。保证书架上至少有一本书。

输出格式

对于每组测试用例,输出一个整数,表示将所有书收集成一个连续区间所需的最少操作次数。

说明/提示

在第一个样例中,你可以将区间 [3,3][3, 3] 向右移动一次,将区间 [4,5][4, 5] 向右移动一次。所有操作后,书形成了连续区间 [5,7][5, 7]。因此答案为 22

在第二个样例中,无需操作,所有书已经形成了连续区间。

在第三个样例中,你可以先将区间 [5,5][5, 5] 向左移动一次,再将区间 [4,4][4, 4] 向左移动一次。所有操作后,书形成了连续区间 [1,3][1, 3]。因此答案为 22

在第四个样例中,你可以将区间 [1,1][1, 1] 向右移动一次,将区间 [2,2][2, 2] 向右移动一次,将区间 [6,6][6, 6] 向左移动一次,再将区间 [5,5][5, 5] 向左移动一次。所有操作后,书形成了连续区间 [3,4][3, 4]。因此答案为 44

在第五个样例中,你可以将区间 [1,2][1, 2] 向右移动一次。所有操作后,书形成了连续区间 [2,5][2, 5]。因此答案为 11

由 ChatGPT 4.1 翻译

样例

5
7
0 0 1 0 1 0 1
3
1 0 0
5
1 1 0 0 1
6
1 0 0 0 0 1
5
1 1 0 1 1
2
0
2
4
1

在线编程 IDE

建议全屏模式获得最佳体验