#Consider equations having the following form:

Consider equations having the following form:

ax12+b*x22+cx32+d*x42=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
这一题的题意比较好理解,就是让你找到ax12+b*x22+cx32+d*x42=0 符合这个公式的数据有多少组,给了你x1,x2,x3,x4的值,这就好写了,首先我们排除那些整组数据都是>0或者<0的,然后再将a,b,c,d,拆分开为a+b何c+d,找到他们的和为0就是对的,接着最后的数据要*16,因为每组数据都有对应的正负值,就是2的四次方。
下面是代码:

#include
#include
int m[1100000],n[1100000];
int main()
{
	int a,b,c,d;
	while(~scanf("%d %d %d %d",&a,&b,&c,&d))
	{
		int i,j,k,l=0;
		if((a<0&&b<0&&c<0&&d<0)||(a>0&&b>0&&c>0&&d>0))
		{
			printf("0\n");
			continue;
		}
		memset(m,0,sizeof(m));
		memset(n,0,sizeof(n));
		for(i=1;i<=100;i++)
		{
			for(j=1;j<=100;j++)
			{
				k=a*i*i+b*j*j;
				if(k>=0)
				m[k]++;
				else
				{
					k=-k;
					n[k]++;					
				}
			}			
		}
		for(i=1;i<=100;i++)
		{
			for(j=1;j<=100;j++)
			{
				k=c*i*i+d*j*j;
				if(k<=0)
				{
					k=-k;
					l=l+m[k];					
				}
				else
				{
					l=l+n[k];					
				}
			}			
		}
		l=l*16;
		printf("%d\n",l);
	}
	return 0;
}

你可能感兴趣的:(每周题解)