HDU 1496 Equations

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
 
题解:整数哈希,最后乘以16(每个X的值都有正负两个值,组合起来就是2^4个)。

 

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 using namespace std;
 5 
 6 const int maxn=50005;
 7 int hashtb[maxn],sum[maxn],tsm[105];
 8 
 9 int Hash(int num){
10     int temp=num%maxn;
11     if(temp<0) temp+=maxn;
12     while(sum[temp]!=0&&hashtb[temp]!=num)
13         temp=(temp+1)%maxn;
14     return temp;
15 }
16 
17 int main()
18 {
19     int a,b,c,d;
20     for(int i=1;i<=100;i++)
21         tsm[i]=i*i;
22     while(scanf("%d %d %d %d",&a,&b,&c,&d)!=EOF){
23         if(a>0&&b>0&&c>0&&d>0||a<0&&b<0&&c<0&&d<0){
24             printf("0\n");
25             continue;
26         }
27         memset(sum,0,sizeof(sum));
28         for(int i=1;i<=100;i++){
29             for(int j=1;j<=100;j++){
30                 int ans=a*tsm[i]+b*tsm[j];
31                 int p=Hash(ans);
32                 hashtb[p]=ans;
33                 sum[p]++;
34             }
35         }
36         int tot=0;
37         for(int i=1;i<=100;i++){
38             for(int j=1;j<=100;j++){
39                 int ans=-(c*tsm[i]+d*tsm[j]);
40                 int p=Hash(ans);
41                 tot+=sum[p];
42             }
43         }
44         printf("%d\n",tot*16);
45     }
46     return 0;
47 }

 

posted on 2012-12-04 16:24  Acmer_Roney  阅读(268)  评论(0编辑  收藏  举报

导航