CF1433B Yet Another Bookshelf

题目描述

有一个可以放下 $n$ 本书的书架。第 $i$ 个位置上如果有书,则 $a_i = 1$,否则 $a_i = 0$。保证书架上至少有一本书。 每次操作,你可以选择某个连续的全是书的区间 $[l, r]$(即对于所有 $l \le i \le r$,都有 $a_i = 1$),并进行如下操作之一: - 向右移动 $1$ 位:将区间内第 $i$ 个位置的书移动到 $i+1$,对所有 $l \le i \le r$ 都执行。仅当 $r+1 \le n$ 且 $r+1$ 位置没有书时,才能进行此操作。 - 向左移动 $1$ 位:将区间内第 $i$ 个位置的书移动到 $i-1$,对所有 $l \le i \le r$ 都执行。仅当 $l-1 \ge 1$ 且 $l-1$ 位置没有书时,才能进行此操作。 你的任务是,计算将书架上的所有书收集成一个连续区间(即没有空隙的区间)所需的最少操作次数。 例如,对于 $a = [0, 0, 1, 0, 1]$,书之间有空隙($a_4 = 0$,而 $a_3 = 1$ 且 $a_5 = 1$);对于 $a = [1, 1, 0]$,书之间没有空隙;对于 $a = [0, 0, 0]$,同样没有空隙。 你需要回答 $t$ 组独立的测试用例。

输入格式

输入的第一行包含一个整数 $t$($1 \le t \le 200$),表示测试用例的数量。接下来是 $t$ 组测试用例。 每组测试用例的第一行包含一个整数 $n$($1 \le n \le 50$),表示书架上的位置数。第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($0 \le a_i \le 1$),其中 $a_i = 1$ 表示该位置有书,$a_i = 0$ 表示该位置没有书。保证书架上至少有一本书。

输出格式

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

说明/提示

在第一个样例中,你可以将区间 $[3, 3]$ 向右移动一次,将区间 $[4, 5]$ 向右移动一次。所有操作后,书形成了连续区间 $[5, 7]$。因此答案为 $2$。 在第二个样例中,无需操作,所有书已经形成了连续区间。 在第三个样例中,你可以先将区间 $[5, 5]$ 向左移动一次,再将区间 $[4, 4]$ 向左移动一次。所有操作后,书形成了连续区间 $[1, 3]$。因此答案为 $2$。 在第四个样例中,你可以将区间 $[1, 1]$ 向右移动一次,将区间 $[2, 2]$ 向右移动一次,将区间 $[6, 6]$ 向左移动一次,再将区间 $[5, 5]$ 向左移动一次。所有操作后,书形成了连续区间 $[3, 4]$。因此答案为 $4$。 在第五个样例中,你可以将区间 $[1, 2]$ 向右移动一次。所有操作后,书形成了连续区间 $[2, 5]$。因此答案为 $1$。 由 ChatGPT 4.1 翻译