于万人中万幸得以相逢,刹那间澈净明通,成为我所向披靡的勇气和惶恐,裂山海,堕苍穹。 |

Jason142

园龄:3年粉丝:12关注:78

CF1678A题解

题目:

传送门

思路:

判断数据中有没有 0,如果数据中有 0 就统计数据中 0 的数量 t,操作次数为 nt;若数据中没有 0,就找有没有相同的数字,如果有就用一次操作把其中一个数变成 0,然后就用 n1 次操作把其他数全部变成了 0,总操作次数为 n;否则就先用一次操作把其中两个数变成其中较小的那个数,再用一次操作把其中一个数变成 0,最后用 n1 次操作把所有的数变成 0,总操作数为 n+1

代码:

#include <bits/stdc++.h>
  using namespace std;
int n,m,a,d,i;
bool b[105],c;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin>>m;
	while (m--)
	{
		c=0;//别忘了清零。 
		d=0;
		for (i=0;i<=100;i++)
		{
			b[i]=0;
		}
		cin>>n;
		for (i=1;i<=n;i++)
		{
			cin>>a;
			if (!a) d++;//统计数据中 0 的数量。 
			else
			{
				if (b[a]) c=1;//判断数据中是否有两个数相同。 
				b[a]=1;
			}
		}
		if (d) cout<<n-d<<endl;//如果数据中有 0。 
		else if (c) cout<<n<<endl;//如果数据没有 0 但有重复 的数字。 
		else cout<<n+1<<endl;//如果数据中既没有 0,又没有重复的数字。 
	}
	return 0;
}

本文作者:Jason142

本文链接:https://www.cnblogs.com/Jason142/p/16264426.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Jason142  阅读(25)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起