CF1007A Reorder the Array 题解

To CF

这道题是排序贪心,将原序列排序后统计答案即可。

但是直接统计会超时,因为排序后具有单调性,所以可以进行一点优化,这样,便可以通过此题。

而这道题的优化在于单调性,因为 \(a[i+1]\) 必然大于 \(a[i]\),所以当 \(a[j]\) 无法与 \(a[i]\) 匹配时,也就可以排除掉 \(a[i+1]\),原因是因为具有单调性。

因此,不需要重新开始匹配,直接向下匹配即可。

这样,也就可以通过本题,避免超时。

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int n;//共n个数
int s[100005];
int ans;//统计答案
int main(){
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&s[i]);
	}
	sort(s,s+n);//排序
	int j=0;
	for(int i=0;i<n-1&&j<n;i++){//统计答案,优化:可以继续从s[j]进行统计
		j++;
		if(s[j]>s[i]) ans++;
		else i--;
	}
	printf("%d",ans);//输出答案
	return 0;
} 
posted @ 2022-05-28 15:34  Scorilon  阅读(43)  评论(0)    收藏  举报