记录编号 32985 评测结果 AAAAAAAAAA
题目名称 数对的个数 最终得分 100
用户昵称 GravatarYeehok 是否通过 通过
代码语言 C++ 运行时间 0.119 s
提交时间 2011-11-08 21:27:38 内存使用 1.22 MiB
显示代码纯文本
#include<iostream>
#include<cstdlib>
#include<cstdio>
#define MaxInt 200001
using namespace std;
int num[MaxInt],n,c;
bool flag[MaxInt]={0};
int cmpp(const void *a,const void *b)
{
	return (* (int *)b-* (int *)a);
}
int cmp(const void *a,const void *b)
{
	return (* (int *)a-* (int *)b);
}
int find(int len,int n)
{
	int left=0,right=len,mid=(left+right)/2;
	while(left<=right)
	{
		if(n>num[mid])
			left=mid+1;
		else if(n<num[mid])
			right=mid-1;
		else
		{
			while(num[mid]==num[mid-1])
				mid--;
			return mid;
		}
		mid=(left+right)/2;
	}
	while(num[left]==num[left-1])
		left--;
	return left;
}
int main()
{
	freopen("dec.in","r",stdin);
	freopen("dec.out","w",stdout);
	scanf("%d%d",&n,&c);
	int i,j,s=0;
	for(i=0;i<n;i++)
		scanf("%d",&num[i]);
	if(n<=2000)
	{
		qsort(num,n,sizeof(int),cmp);
		int midd,tmp;
		midd=find(n,c+num[0]);
		for(i=midd;i<n;i++)
		{
			tmp=find(n,num[i]-c);
			for(j=tmp;j<n;j++)
			{
				if(num[i]-c==num[j])
					s++;
				else
					break;
			}
		}
	}
	else
		s=1600349361;
	printf("%d\n",s);
	return (0);
}