Description
Input
Output
Sample Input
6 -45 22 42 -16 -41 -27 56 30 -36 53 -37 77 -36 30 -75 -46 26 -38 -10 62 -32 -54 -6 45
Sample Output
5
Hint
一开始用map gg,改用Hash,Hash函数写太屎又gg,二分+枚举勉强A了。。。代码如下:
#include<cstdio>
#include<algorithm>
#define m 10000
using namespace std;
int p[16000005],q[16000005],a[4][4005];
int Find(int x,int n)
{
int l=0,r=n,mid;
while(l<r)
{ mid=l+(r-l)/2;
if(x>p[mid]) l=mid+1;
else r=mid;
}
int c=l;
l=0,r=n;
while(l<r)
{
mid=l+(r-l)/2;
if(x>=p[mid]) l=mid+1;
else r=mid;
}
return l-c;
}
int main()
{
int n,t=0,sum=0;
scanf("%d",&n);
for(int i=0;i<n;++i)
{
scanf("%d %d %d %d",&a[0][i],&a[1][i],&a[2][i],&a[3][i]);
}
for(int i=0;i<n;++i)
{
for(int j=0;j<n;++j)
{ p[t]=a[0][i]+a[1][j];
q[t++]=-(a[2][i]+a[3][j]);
}
}
sort(p,p+t);
for(int i=0;i<t;++i)
{
sum+=Find(q[i],t);
}
printf("%d\n",sum);
return 0;
}