Hash的H大写,hash好像是保留字
/*题目规定了abcd不能同时为0 所以只要考虑全正的情况
(而正负对称 *2,又因为是 4个数,所以2^4) */
#include <bits/stdc++.h>
using namespace std;
const int maxn=50021;
int g[maxn],f[maxn],t[105];
int Hash(int k){
int t=k%maxn;
if(t<0) t+=maxn;
while(f[t]!=0&&g[t]!=k){
t=(t+1)%maxn;
}
return t;
}
int main(){
int a,b,c,d,s,p;
for(int i=1;i<=100;i++)
t[i]=i*i;
while(cin>>a>>b>>c>>d){
if(a>0&&b>0&&c>0&&d>0||a<0&&b<0&&c<0&&d<0){
cout<<"0"<<endl;
continue; //不是break!
}
int sum=0;
memset(f,0,sizeof(f));
memset(g,-1,sizeof(g));
for(int i=1;i<=100;i++)
for(int j=1;j<=100;j++){
s=a*t[i]+b*t[j];
p=Hash(s);f[p]++;g[p]=s;
}
for(int i=1;i<=100;i++)
for(int j=1;j<=100;j++){
s=-(c*t[i]+d*t[j]);
p=Hash(s);
sum+=f[p];
}
printf("%d\n",sum*16);
}
}