题解 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
",ans);
	}
	return 0;
}

原文地址:https://www.cnblogs.com/Wuhen-GSL/p/13869523.html