C++L13 套娃(30 分)

  • 套娃是俄罗斯特产的木制玩具,由许多个图案一样的空心娃娃一个套一个组成。
  • 桌子上有 n 个娃娃,包括 5 种型号,分别是 1~5 号,1 号最小,5 号最大。
  • 大的娃娃可以套在比它更小的娃娃外面,如果这样做,你只能看见一个大娃娃。
  • 现在要把这 n 个娃娃,能套在一起的都套起来,
  • 问,能凑成几套完整的套娃?桌子上最少能看见几个娃娃?

例如,有 10 个娃娃,型号分别是 1,3,1,2,1,5,2,3,4,5。
可以凑成 1 套完整的:因为 4 号娃娃最少,只有 1 个;
桌子上最少能看见 3 个娃娃,因为能套的都已经套起来了,
包括:一套完整的:{1,2,3,4,5},两套不完整的:{1,2,3,5}和{1}。

  • 输入:

第一行是一个正整数 n(n<=100,000)代表娃娃数量;
第二行包含 n 个 1~5 的整数,代表每个娃娃的型号:相邻两个整数之间用空格隔开。

  • 输出:

第一行一个整数,为能凑成完整套娃的数量;
第二行一个整数,为桌子上最少能看见的娃娃的数量。

  • 输入样例 1:

10
1 3 1 2 1 5 2 3 4 5

  • 输出样例 1:

1
3

C++L13 套娃

能凑成几套完整的套娃取决于型号最大的娃娃的数量。
例如,如果 5 号娃娃最少,只有 1 个,那么无论如何也凑不出 2 套完整的套娃。
而最少能看见几个娃娃取决于数量最多的那个型号的娃娃的个数。
假设 3 号娃娃最多,有 6 个,
那么比 3 号小的娃娃可以套在 3 号里面,比 3 号大的娃娃可以把 3 号套住,
此时桌面上最少能看见的娃娃依然是 6 个。

#include<bits/stdc++.h>
using namespace std;
int a[6]; //桶排序数组, 表示1-5号娃娃出现的次数
int main(){
	int n,m;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>m; //m号娃娃
		a[m]++; //m号娃娃每出现一次累加1
	}
	sort(a,a+6); //按照出现次数排序
	for(int i=1;i<=5;i++)
		if(a[i]){ //为防止输出出现零次的娃娃,有值才输出
			cout<<a[i]<<endl;
			break; //只输出出现次数最少的娃娃, 然后跳出
		}
	cout<<a[5]; //再输出出现次数最多的娃娃
	return 0;
}

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部