POJ1840 hash

时间:2023-03-09 07:49:45
POJ1840 hash

POJ1840

问题重述:

给定系数a1,a2, ..,a5,求满足a1 * x1 ^ 3 + a2 * x2 ^ 3 +... + a5 * x5 ^ 3 = 0的 xi 的组数。其中ai, xi都在[-50, 50]内,且xi != 0。

算法:

1)用h[i]记录满足a1 *  x1 ^3 + a2 * x2 ^ 3 = i 的x1, x2组数。

2)令ans = 0, 循环x1, x2, x3的值,若 tmp = a3 * x3^3 + a4 * x4^3 + a5 * x5^3, h[-tmp] != 0, 则 ans += h[-tmp]。

AC代码

 #include <iostream>
 #include <cstring>
 #include <cstdio>

 using namespace std;

 ;
 ;
 short h[maxn];
 ];

 void _hash()
 {
     memset( h, , sizeof(h) );
     ; i <= ; i++) {
         ) continue;
         ; j <= ; j++) {
             ) continue;
             h[a[] * i * i * i + a[] * j * j * j + offset]++;
         }
     }
 }

 int main()
 {
     ; i < ; i++)
         cin >> a[i];
     _hash();
     ;
     ; i <= ; i++)
         ; j <= ; j++)
             ; k <= ; k++) {
                 ) {
                     ] * i * i * i +
                               a[] * j * j * j +
                               a[] * k * k * k;
                     )
                         )
                             ans += h[offset - tmp];
                 }
             }
     cout << ans << endl;
     ;
 }