中途相遇法
不好好读题害死人啊,空行的问题!
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
const int maxn = 4000+10;
using namespace std;
int a[maxn],b[maxn],c[maxn],d[maxn],p[maxn*maxn];
int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
int cas=0;
memset(p,0,sizeof(p));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%d %d %d %d",&a[i],&b[i],&c[i],&d[i]);
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
p[cas++]=a[i]+b[j];
}
sort(p,p+cas);
LL cnt=0;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
int temp=-c[i]-d[j];
cnt+=(LL)(upper_bound(p,p+cas,temp)-lower_bound(p,p+cas,temp));
}
printf("%lld\n",cnt);
if(T)printf("\n");
}
return 0;
}