题目分析
贪心水题。
首先将原数组从小往大排序,然后不难想到一个简单但会超时的思路,即对每个位置,向后找到一个比自己大的数进行搭配。
然后是一个简单的小优化,由于数组已经排序,那么如果一个数无法与 \(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);
}
标签:puts,int,题解,CF1007A,while,ans
From: https://www.cnblogs.com/yizhixiaoyun/p/17033376.html