您的位置:首页 > 其它

Eqs hash表存储,注意hash要用char类型

2013-10-26 15:07 429 查看
[align=left]Problem Description[/align]
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.

[align=left]Input[/align]
The only line of input contains the 5 coefficients a1, a2, a3, a4, a5, separated by blanks.

[align=left]Output[/align]
The output will contain on the first line the number of the solutions for the given equation.

[align=left]Sample Input[/align]

37 29 41 43 47

[align=left]Sample Output[/align]

654

***************************************************************************************************************************
hash表的应用
***************************************************************************************************************************

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std;
const int maxn=20000000;//防止出现负;
char hash[40000000];//此处用char节省内存
int a1,a2,a3,a4,a5;
int i,j,k;
int main()
{
int sum;
while(scanf("%d%d%d%d%d",&a1,&a2,&a3,&a4,&a5)!=EOF)
{
sum=0;
memset(hash,0,sizeof(hash));
//前两个
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+maxn]++;//hash表存储
//后三个
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+maxn];//由结果的对称性,可得
printf("%d\n",sum);
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐