POJ 1840 Eqs (哈希)

网友投稿 641 2022-08-26

POJ 1840 Eqs (哈希)

POJ 1840 Eqs (哈希)

Description

Consider equations having the following form: a1x13+a2x23+a3x33+a4x43+a5x53=0The 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

题意

给出 a1−a5

思路

因为给出了 xi 的范围,所以如果直接暴力的话用五重循环一定会超时,所以我们可以把这个方程分成左右两边,也就是移项。对左边枚举 xi 取各个值时所求得数值的次数,然后枚举右边,若计算的结果刚好之前已经出现过,则找到了 hash[temp]

AC 代码

#include#include#include#include#include#includeusing namespace std;#include#include#define MAXN 25000010typedef __int64 LL;int a1,a2,a3,a4,a5;short hash[MAXN];int main(){ while(~scanf("%d%d%d%d%d",&a1,&a2,&a3,&a4,&a5)) { int ans=0,temp; for(int i=-50; i<=50; i++) for(int j=-50; j<=50; j++) { if(i==0||j==0)continue; temp=-(a1*i*i*i+a2*j*j*j); if(temp<0)temp+=MAXN; hash[temp]++; } 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)continue; temp=a3*i*i*i+a4*j*j*j+a5*k*k*k; if(temp<0)temp+=MAXN; if(hash[temp]) ans+=hash[temp]; } printf("%d\n",ans); } return 0;}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:值得阅读的C语言开源项目代码(c语言开源项目推荐)
下一篇:POJ 2442 Sequence (堆)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~