ACM: 哈希暴力求解 哈希题 poj 184…

来源:互联网 发布:杭州创业软件官网 编辑:程序博客网 时间:2024/05/18 00:57

                                                                    Eqs

Description

Consider equations having the following form:
a1x13+ a2x23+a3x33+ a4x43+ a5x53=0
The coefficients are given integers from the interval[-50,50].
It is consider a solution a system (x1, x2, x3, x4, x5) thatverifies the equation, xi∈[-50,50], xi != 0, anyi∈{1,2,3,4,5}.

Determine how many solutions satisfy the given equation.

Input

The only line of input contains the 5 coefficients a1, a2, a3,a4, a5, separated by blanks.

Output

The output will contain on the first line the number of thesolutions for the given equation.

Sample Input

37 29 41 43 47

Sample Output

654

题意: a1x13+a2x23+ a3x33+ a4x43+a5x53=0 求方程有多少个解.

 

解题思路:

               1. 先求解x1,x2,x3的值的个数保存在hash中.

               2. 再求解x4,x5的值统计就可以得出解的个数.

 

代码:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
const int MAX = 31250000;  //5*50^4*2

char hash[MAX*2+100];
int a,b,c,d,e;
int ans1, ans2;
int result;

int main()
{
//   freopen("input.txt","r",stdin);
   while(scanf("%d %d %d %d%d",&a,&b,&c,&d,&e)!= EOF)
    {
      result = 0;
      memset(hash,0,sizeof(hash));
      ans1 = 0;
      ans2 = 0;
      for(int i = -50; i <= 50;++i)
      {
         for(int j = -50; j <= 50;++j)
         {
            for(int k = -50; k <= 50;++k)
            {
               if(i != 0 && j !=0 && k != 0)
               {
                  ans1 = (a*i*i*i + b*j*j*j + c*k*k*k);
                  hash[ans1+MAX]++;
               }
            }
         }
      }
      
      for(int i = -50; i <= 50;++i)
      {
         for(int j = -50; j <= 50;++j)
         {
            if(i != 0 && j !=0)
            {
               ans2 = -(d*i*i*i + e*j*j*j);
               result += hash[MAX+ans2];
            }
         }
      }
      
      printf("%d\n",result);
    }
    return0;
}

 

0 0