哈希 poj 1480

计算可能的数目

a3*x3^3+a4*x4^3+a5*x5^5=-(a1*x1^3+a2*x2^3);

列举右边的  结果存到数组  z[i] 和为i的右边等式的数目

如果和小于0  +25000000

反正能存下就行了 

然后列举一下左边的

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<string.h>
 4 #include<math.h>
 5 #include<vector>
 6 
 7 using namespace std;
 8 
 9 short z[25000010];
10 int a[5];
11 
12 int main()
13 {
14     for(int i=0;i<5;i++)
15         scanf("%d",&a[i]);
16     for(int i=-50;i<=50;i++)
17     {
18         if(!i)
19         continue;
20 
21         for(int j=-50;j<=50;j++)
22         {
23             if(!j)
24             continue;
25             int sum=-(a[0]*i*i*i+a[1]*j*j*j);
26             if(sum<0)
27             sum+=25000000;
28             z[sum]++;
29         }
30     }
31     int cnt=0;
32     for(int i=-50;i<=50;i++)
33     {
34         if(!i)
35         continue;
36 
37         for(int j=-50;j<=50;j++)
38         {
39             if(!j)
40             continue;
41 
42             for(int k=-50;k<=50;k++)
43             {
44                 if(!k)
45                 continue;
46                 int sum=a[2]*i*i*i+a[3]*j*j*j+a[4]*k*k*k;
47                 if(sum<0)
48                 sum+=25000000;
49                 cnt+=z[sum];
50             }
51         }
52     }
53     printf("%d
",cnt);
54     return 0;
55 }
原文地址:https://www.cnblogs.com/cherryMJY/p/6100578.html