B. Rebellion

给你一组长度为n的数组a 这个数组a都是由0 1 组成 

现在由两个操作 选择其中两个数 ai和aj (1)把ai加到aj中 (2)并且把ai从a数组中移除 n-1

怎么花最少的步数让这个数组变成递增的

输入样例

4

8

0 0 1 1 1 1 1 1

5

1 0 0 1 1

2

1 0

11

1 1 0 0 1 0 0 1 1 1 0

输出样例

0
1
1
3

 思路:统计0的个数num 在前num中1的个数就是所求答案

          例如 1 0 0 1 0 0 1 0 0 0 中 7 个0  肯定是想把所有0 都在前面 把 1 后面的0 变成1 这样前7 个中由1 的数 就代表 后面要改变的0 的数 (呃 大体感觉是这样)

#include
#include
#include
#include
using namespace std;
int main()
{
	int t;scanf("%d",&t);
	while(t--)
	{
		int n;scanf("%d",&n);
		int a[n+1]={0};
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&a[i]);
		}
		int num=0;
		int t=0;
		for(int i=1;i<=n;i++)
		{
			if(a[i]==0) num++;
		}
		for(int i=1;i<=num;i++)
		{
			if(a[i]==1) t++;
		}
		cout<

 

你可能感兴趣的:(cf,思维)