1496
哈希,空间换时间。
这题比较暴力。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+5;
int a,b,c,d;
int ans;
int s1[MAXN];
int s2[MAXN];
int main(){
while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF)
{
ans=0;
//符号相同为零
if((a>0&&b>0&&c>0&&d>0)||((a<0&&b<0&&c<0&&d<0)))
{
printf("0\n");
continue;
}
//哈希
memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));
for(int i=1;i<=100;i++)
for(int j=1;j<=100;j++)
{
int k=a*i*i+b*j*j;
if(k>=0)
s1[k]++;
else
s2[-k]++;
}
for(int i=1;i<=100;i++)
for(int j=1;j<=100;j++)
{
int k=c*i*i+d*j*j;
if(k>0)
ans+=s2[k];
else
ans+=s1[-k];
}
printf("%d\n",ans*16);
}
return 0;
}