排序后从右向左扫描,如果牛i能和牛x相匹配,那么牛i也能与牛x之前的牛相匹配,结果除以2
#include"stdio.h"
#include"stdlib.h"
int L[200000];
int comp(const void *a,const void *b)
{return *(int *)a-*(int *)b;}
main()
{
int s,i,n,count=0,t,x;
scanf("%d%d",&n,&s);
for(i=0;i<n;i++)
scanf("%d",L+i);
qsort(L,n,sizeof(int),comp);
x=0;
for(i=n-1;i>=0;i--)
{
while(L[i]+L[x]<=s&&x<n)x++;
count+=x;
if(x-1>=i)count--;
}
printf("%d\n",count/2);
return 0;
}