题解 CF1433B 【Yet Another Bookshelf】

CF1433B

根据题意,将所有 \(1\) 移动为连续的最小操作次数为所有 \(1\) 之间 \(0\) 的个数

因为数据范围很小,只要分别枚举找到第一个 \(1\) 和最后一个 \(1\) 统计他们之间 \(0\) 的个数即可

//AC代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 55
using namespace std;
int T,a[N],n;
int main()
{
	scanf("%d",&T);
	while(T--){
		memset(a,0,sizeof a);
		scanf("%d",&n);
		int ans=0;
		for(int i=1;i<=n;++i){
			scanf("%d",&a[i]);
		}
		int first,last;
		for(int i=1;i<=n;++i)
			if(a[i]==1){
				first=i;break;
			}
		for(int i=n;i>=1;--i)
			if(a[i]==1){
				last=i;break;
			}
		for(int i=first;i<=last;++i){
			if(a[i]==0)ans++;
		}
		printf("%d\n",ans);
	}
	return 0;
}

posted @ 2020-10-24 14:59  Wuhen_GSL  阅读(137)  评论(0)    收藏  举报