AT4573 题解

题目传送门

小学生又双叒叕来写题解啦!

我来介绍一种与众不同的跑得更慢的方法,那就是排序加二分

排序的作用是为了二分,因为二分的前提是数组有序。

因此读入完数据后排序一下。

然后调用算法库的二分函数。

二分函数指这些,不会的童鞋自己了解。

思路是先算出第一个问题的数量,即使用二分卡出范围。

再算出第一、二个问题的总数量,再与上面的相减。

第三个问题就是用总数减去前两个问题的数量。

最后输出三个问题数量中的最小值即可。

送上满分代码:

#include <iostream>
#include <cstdio>
#include <algorithm>  //调用二分函数。
using namespace std;
int a[105];
int main()
{
	int n, A, B;
	scanf("%d%d%d", &n, &A, &B);
	for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
	sort(a+1, a+n+1);
	int one = upper_bound(a+1, a+n+1, A) - a - 1;
	int two = upper_bound(a+1, a+n+1, B) - a - 1 - one;
	int three = n - one - two;
	int t = min(one, two);
	printf("%d\n", min(t, three));  //别漏掉祖传换行。
	return 0;
}

首发:2022-02-04 15:16:33

posted @ 2022-08-25 00:10  liangbowen  阅读(11)  评论(0编辑  收藏  举报