hash,不会。
CODE:
#include <stdio.h>
#include <string.h>
int hash[2000000];
const int N = 1000000;
int p[100];
void init()
{
for(int i = 1;i <= 100; i++)
p[i] = i*i;
}
int main()
{
init();
int a, b, c, d;
int i, j;
while(~scanf("%d%d%d%d", &a, &b, &c, &d))
{
if((a > 0 && b > 0 && c > 0 && d > 0) ||
#include <string.h>
int hash[2000000];
const int N = 1000000;
int p[100];
void init()
{
for(int i = 1;i <= 100; i++)
p[i] = i*i;
}
int main()
{
init();
int a, b, c, d;
int i, j;
while(~scanf("%d%d%d%d", &a, &b, &c, &d))
{
if((a > 0 && b > 0 && c > 0 && d > 0) ||
(a < 0 && b < 0 && c < 0 && d < 0))
{
printf("0\n");
continue;
} //剪枝
for(i = 1; i <= 100; i++)
for(j = 1; j <= 100; j++)
hash[p[i]*a+p[j]*b+N]++;
int tot = 0;
for(i = 1; i <= 100; i++)
for(j = 1; j <= 100; j++)
tot += hash[N-p[i]*c-p[j]*d];
printf("%d\n", tot<<4); //正负各两种情况
for(i = 1; i <= 100; i++) //memset(hash, 0, sizeof(hash));
for(j = 1; j <= 100; j++)
hash[p[i]*a+p[j]*b+N]--;
}
return 0;
}