CF1007A 题解

题目传送门

题目分析

贪心水题。

首先将原数组从小往大排序,然后不难想到一个简单但会超时的思路,即对每个位置,向后找到一个比自己大的数进行搭配。

然后是一个简单的小优化,由于数组已经排序,那么如果一个数无法与 \(a_i\) 匹配,那么也不可能与 \(a_{i+1}\) 及以后的数匹配,因此可以直接跳过。

贴上代码

#include<bits/stdc++.h>
#define ok puts("Yes")
#define no puts(":(")
using namespace std;
int read(){
	int x=0,f=1;char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-48;
		c=getchar();
	}
	return x*f;
}
const int maxn=100010;
int n;
int cnt,ans;
int a[maxn];
inline void init(){
	n=read();cnt=1;
	for(register int i=1;i<=n;++i) a[i]=read();
	sort(a+1,a+n+1);
}
int main(){
	init();
	for(register int i=1;i<=n;++i){
		cnt++;
		if(cnt>n) break;
		if(a[i]>=a[cnt]) i--;
		else ans++;
	}
	printf("%d",ans);
}
posted @ 2023-01-07 19:59  yizhixiaoyun  阅读(35)  评论(0)    收藏  举报