B.在吸尘器上做标记
每test1.5秒的时间限制
每个test256兆字节的内存限制
inputstandard输入
outputstandard输出
马克正在打扫一排n个房间。第i个房间的灰尘等级为非负ai。他有一个神奇的清洁机器,可以完成以下三个步骤的操作。
选择两个指标i
ai: ai−1。
设aj为aj+1。
Mark的目标是让a1=a2=…=an−1=0,这样他就可以很好地打扫第n个房间。确定达到目标所需的最小操作次数。
输入
第一行包含一个整数t(1≤t≤104)——测试用例的数量。
每个测试用例的第一行包含一个整数n(2≤n≤2⋅105)——房间数。
每个测试用例的第二行包含n个整数a1, a2,…, an(0≤ai≤109)—各房间的尘埃水平。
保证所有测试用例的n之和不超过2⋅105。
输出
对于每个测试用例,打印一行包含一个整数——操作的最小数量。它可以证明有一个序列的操作满足目标。
例子
inputCopy
4
3.
2 0 0
5
0 2 0 2 0
6
2 0 3 0 4 6
4
0 0 0 10
outputCopy
3.
5
11
0
请注意
在第一种情况下,一个可能的操作序列如下。
选择i=1和j=2,得到数组[1,1,0]。
选择i=1和j=3,得到数组[0,1,1]。
选择i=2和j=3,得到数组[0,0,2]。
此时,a1=a2=0,完成整个过程。
在第二种情况下,可能的操作顺序如下。
选择i=4和j=5,得到数组[0,2,0,1,1]。
选择i=2和j=3,得到数组[0,1,1,1]。
选择i=2和j=5,得到数组[0,0,1,1,2]。
选择i=3和j=5,得到数组[0,0,0,1,3]。
选择i=4和j=5,得到数组[0,0,0,4]。
在最后一种情况下,数组已经满足条件。
#include<bits/stdc++.h>
using namespace std;
const int N = 1e7;
long long a[N];
int main()
{
int n;
cin >> n;
while (n -- )
{
int m;
cin >> m;
int k=0;
for (int i = 0; i <m; i ++ )
cin >> a[i];
for (int i = 0; i <m&&a[i]==0; i ++ )
{
k++;
}
long long cnt=0;
for (int i = k; i<m-1; i ++ )
{
cnt+=a[i];
if(!a[i])
cnt++;
}
cout<<cnt<<endl;
}
}