哈希
我太屎啦,以后一定不能再犯写while循环忘了更改循环条件的错误,导致浪费这么长时间来调试
#include <iostream>
#include <cstdio>
using namespace std;
const int mod=10000003;
const int maxn=4100;
struct
{
int data,sum,next;
}node[maxn*maxn];
int head[mod],f[4][maxn],num;
void insert(int p)
{
int k=(p%mod+mod)%mod;
int i=head[k];
while(i!=-1)
{
if(node[i].data==p)
{
node[i].sum++;
break;
}
i=node[i].next;
}
if(i==-1){
node[num].data=p;node[num].next=head[k];node[num].sum=1;
head[k]=num;
num++;
}
}
int find(int p)
{
int k=(p%mod+mod)%mod;
int i=head[k];
while(i!=-1)
{
if(node[i].data==p) return node[i].sum;
i=node[i].next;
}
return 0;
}
int main()
{
int n;
scanf("%d",&n);
num=0;
int i,j;
memset(head,-1,sizeof(head));
for(i=0;i<n;i++)
{
scanf("%d%d%d%d",&f[0][i],&f[1][i],&f[2][i],&f[3][i]);
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
insert(f[0][i]+f[1][j]);
}
}
int tot=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
tot+=find(-(f[2][i]+f[3][j])) ;
}
}
cout<<tot<<endl;
return 0;
}