#include<stdio.h>
#define N 4050
int A[N],B[N],C[N],D[N],CD[N*N];
void qsort(int l,int r)//快排
{
int i,j,x;
if(l<r)
{
i=l;
j=r;
x=CD[l];
while(i<j)
{
while(i<j&&CD[j]>=x)
j--;
if(i<j)
CD[i++]=CD[j];
while(i<j&&CD[i]<x)
i++;
if(i<j)
CD[j--]=CD[i];
}
CD[i]=x;
qsort(l,i-1);
qsort(i+1,r);
}
return ;
}
int lower_bound(int l,int r,int x)//盗版函数
{
int mid;
while(l<r)
{
mid=(r+l)/2;
if(CD[mid]>x)
r=mid-1;
else
{
if(CD[mid]==x)
r=mid;
else
l=mid+1;
}
}
if(CD[l]==x)
return l;
else
return -1;
}
int upper_bound(int l,int r,int x)//盗版函数
{
int mid;
while(l<r)
{
mid=(r+l+1)/2;
if(CD[mid]>x)
r=mid-1;
else
{
if(CD[mid]==x)
l=mid;
else
l=mid+1;
}
}
if(CD[r]==x)
return r;
else
return -1;
}
int main(void)
{
int i,j,n,cd;
int res=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d%d%d%d",&A[i],&B[i],&C[i],&D[i]);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
CD[i*n+j]=C[i]+D[j];
}
qsort(0,n*n-1);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
cd=-(A[i]+B[j]);
if(upper_bound(0,n*n-1,cd)>=0)
{
res+=(upper_bound(0,n*n-1,cd)-lower_bound(0,n*n-1,cd)+1);
}
}
printf("%d\n",res);
}
poj 2785 4 Values whose Sum is 0
最新推荐文章于 2019-10-30 09:23:42 发布