首页 > 代码库 > BZOJ 2348 Baltic 2011 Plagiarism 排序

BZOJ 2348 Baltic 2011 Plagiarism 排序

题目大意:求n个数中有多少无序点对(i,j)满足0.9a[j]<=a[i]<=a[j]

《论排序算法的高效性和合理利用以及能否记得使用排序算法》

忘写sort贡献了个WA 2333333

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 100100
#define EPS 1e-7
using namespace std;
int n,a[M];
long long ans;
int main()
{
	int i,j;
	cin>>n;
	for(i=1;i<=n;i++)
		scanf("%d",&a[i]);
	sort(a+1,a+n+1);
	for(i=1,j=1;i<=n;i++)
	{
		while(a[j]+EPS<a[i]*9.0/10.0)
			++j;
		ans+=i-j;
	}
	cout<<ans<<endl;
}


BZOJ 2348 Baltic 2011 Plagiarism 排序