http://acm.hdu.edu.cn/showproblem.php?pid=1496

今天刚知道这种方法叫哈希。。。开始没考虑清楚边界,各种错,A了再看也就那么回事

View Code
#include <stdio.h>
#include <string.h>
const int N=1000000;
int hash[2000001];
int main()
{
    int a,b,c,d;
    int ans;
    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;
        }
        ans=0;
        memset(hash,0,sizeof(hash));
        for(i=1;i<=100;i++)
            for(j=1;j<=100;j++)
                hash[N+a*i*i+b*j*j]++;
        for(i=1;i<=100;i++)
            for(j=1;j<=100;j++)
                ans+=hash[N-c*i*i-d*j*j];
        printf("%d\n",ans*16);
    }
    return 0;
}