|
EquationsTime 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
Sample Output
Author
LL
|
题目分析:枚举前两个放入哈希数组中,然后判断另外两个的相反数在不在数组中,如果在则有一组符合。
代码:
#include <stdio.h>
#include <string.h>
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 );
}
}