Equations HDU - 1496 (哈希)

里云“智慧航空AI大赛”(报名中...) 

Equations

Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 8648    Accepted Submission(s): 3583


Problem Description
Consider equations having the following form: 

a*x1^2+b*x2^2+c*x3^2+d*x4^2=0
a, b, c, d are integers from the interval [-50,50] and any of them cannot be 0.

It is consider a solution a system ( x1,x2,x3,x4 ) that verifies the equation, xi is an integer from [-100,100] and xi != 0, any i ∈{1,2,3,4}.

Determine how many solutions satisfy the given equation.
 

Input
The input consists of several test cases. Each test case consists of a single line containing the 4 coefficients a, b, c, d, separated by one or more blanks.
End of file.
 

Output
For each test case, output a single line containing the number of the solutions.
 

Sample Input
 
       
1 2 3 -4 1 1 1 1
 

Sample Output
 
       
39088 0
 

Author
LL
 

题目分析:枚举前两个放入哈希数组中,然后判断另外两个的相反数在不在数组中,如果在则有一组符合。

代码:

#include 
#include 
 
int hash[2000005];
 
int main(  )
{
    int a, b, c, d;
    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;
        }
        memset( hash, 0, sizeof( hash ) );
        int cnt= 0;
        for( int i= 1; i<= 100; ++i )
        {
            for( int j= 1; j<= 100; ++j )
            {
                hash[ a* i* i+ b* j* j+ 1000000 ]++;
            }
        }
        for( int i= 1; i<= 100; ++i )
        {
            for( int j= 1; j<= 100; ++j )
            {
                cnt+= hash[ 1000000- c*i *i- d*j *j ];
            }
        }
        printf( "%d\n", cnt* 16 );
    }
     
}

你可能感兴趣的:(哈希)