POJ 1840 Eqs Hash

 

/*
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) that verifies the equation, xi∈[-50,50], xi != 0, any i∈{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 the solutions for the given equation.
Sample Input
37 29 41 43 47
Sample Output
654
*/
//目测是最近写的最短的代码,500ms 3900K飘过,有卡BUG嫌疑
//题目很水
//就是给你5个数计算一个等式成立的解的个数
//放入hash中判断一下,计算数目就行
#include
#include
using namespace std;
const int MAX = 20000000;
char hash[40000000];   //这里是关键,用char比short节约1半内存,否则直接超内存,尼玛我从int改short再改char才过
int main()
{
//	freopen("in.txt","r",stdin);
	memset(hash,0,sizeof(hash));
	int sum=0,i,j,k;
	int a1,a2,a3,a4,a5;
	cin >> a1 >> a2 >> a3 >> a4 >> a5 ;
	//前半段
	for(i = -50 ; i <= 50 ; i++)
		for(j = -50 ; j <= 50 ; j++)
			if(i!=0 && j!=0)
				hash[i*i*i*a1 + j*j*j*a2 + MAX]++;
	//后半段
	for(i = -50 ; i <= 50 ; i++)
		for(j = -50 ; j <= 50 ; j++)
			for(k = -50 ; k <= 50 ;k++)
				if(i!=0 && j!=0 && k!=0)
					sum+=hash[i*i*i*a3 + j*j*j*a4 + k*k*k*a5 + MAX];
	cout << sum << endl;
	return 0;
}

转载于:https://www.cnblogs.com/Felix-F/archive/2012/03/14/3223696.html

你可能感兴趣的:(POJ 1840 Eqs Hash)