[codeforces 1335C] Two Teams Composing 统计技能种类数量+统计同一技能最大数量

Codeforces Round #634 (Div. 3)   比赛人数11922  慢慢的对Div. 3难度有了些感觉

[codeforces 1335C]   Two Teams Composing   统计技能种类数量+统计同一技能最大数量

总目录详见https://blog.csdn.net/mrcrack/article/details/103564004

在线测评地址https://codeforces.com/contest/1335/problem/C

ProblemLangVerdictTimeMemory
C - Two Teams Composing GNU C++17Accepted77 ms1600 KB

手工算法如下,可特别关注最后一组数据的生成过程

7
4 2 4 1 4 3 4
统计技能种类数量        4种不同技能
统计同一技能最大数量    技能1(数量1) 技能2(数量1) 技能3(数量1) 技能4(数量4)

选出 技能4(数量4) 作为  第2组
扣除技能4,还有4-1=3种不同技能 作为  第1组

发现,第2组数量4,第1组数量3
输出结果为3


5
2 1 5 4 3
统计技能种类数量        5种不同技能
统计同一技能最大数量    技能1(数量1) 技能2(数量1) 技能3(数量1) 技能4(数量1) 技能5(数量1)

选出 技能1(数量1) 作为  第2组
扣除技能1,还有5-1=4种不同技能 作为  第1组

发现,第2组数量1,第1组数量4
输出结果为1

1
1
统计技能种类数量        1种不同技能
统计同一技能最大数量    技能1(数量1)

选出 技能1(数量1) 作为  第2组
扣除技能1,还有1-1=0种不同技能 作为  第1组

发现,第2组数量1,第1组数量0
输出结果为0

4
1 1 1 3
统计技能种类数量        2种不同技能
统计同一技能最大数量    技能1(数量3)

选出 技能1(数量3) 作为  第2组
扣除技能1,还有2-1=1种不同技能 作为  第1组

发现,第2组数量3,第1组数量1
此时,可让第2组数量3,匀出1个数量给第1组
更新后的数据,第2组数量2,第1组数量2
输出结果为2

AC代码如下

#include <cstdio>
#include <algorithm>
#define maxn 200010
using namespace std;
int a[maxn],b[maxn];
int main(){
	int t,n,i,tot,mx;
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		mx=0,tot=0;
		for(i=1;i<=n;i++)b[i]=0;
		for(i=1;i<=n;i++)scanf("%d",&a[i]),b[a[i]]++;//统计同一技能数量
		for(i=1;i<=n;i++){
			if(b[i])tot++;//统计不同技能种类
			mx=max(mx,b[i]);
		}
		tot--;
		if(tot>=mx)printf("%d\n",mx);
		else{//tot<mx
			printf("%d\n",tot+(mx-tot>=2?1:0));//第2组匀给第1组
		}
	}
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值