POJ 1840 Eqs(hash表)

原创 2015年07月07日 11:10:58

Description
给出一个5元3次方程a1*x1^3+a2*x2^3+a3*x3^3+a4*x4^3+a5*x5^3=0,输入其5个系数,求它的解的个数,其中系数 ai∈[-50,50] 自变量xi∈[-50,0)∪(0,50]
Input
方程的五个系数
Output
方程解的个数
Sample Input
37 29 41 43 47
Sample Output
654
Solution
转化为ax1^3+bx2^3+cx3^3=-dx4^3-ex5^3,利用哈希查找的方式优化枚举,我先将方程左边的式子的值打表存放,然后枚举右边的式子,对于右边每一种计算的可能,判断哈希位置在哈希表中是否存在,若不存在,则说明左边所有式子的可能取值中没有一个与其相等。若存在,则说明在该左边式子所有可能的取值中只有在该哈希位置的值才可能与其相等。接下来就是逐个比较,若相等则count++,其中count为记录方程所有可能解的个数。否则比较下一个。
Code

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF (1<<29)
#define maxn 2000000
int a,b,c,d,e;
int hash[maxn];
int ans;
int main()
{
    scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
    int res=0;
    for(int i=-50;i<=50;i++)//枚举左边式子的值 
    {
        if(i==0) continue;
        for(int j=-50;j<=50;j++)
        {
            if(j==0) continue;
            for(int k=-50;k<=50;k++)
            {
                if(k==0) continue;
                int temp=i*i*i*a+j*j*j*b+k*k*k*c;
                hash[res++]=temp;//打hash表 
            }
        }
    }
    sort(hash,hash+res);//对hash表排序 
    ans=0;
    for(int i=-50;i<=50;i++)//枚举右边式子的值 
    {
        if(i==0) continue;
        for(int j=-50;j<=50;j++)
        {
            if(j==0) continue;
            int temp=i*i*i*d+j*j*j*e;
            ans+=upper_bound(hash,hash+res,-temp)-lower_bound(hash,hash+res,-temp);//记录解的数量 
        }
    }
    printf("%d\n",ans);
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

POJ 1840 Eqs(简单hash入门)

题目链接:http://poj.org/problem?id=1840 CSUST 2012年暑假8月组队后第十二次个人赛:http://acm.hust.edu.cn:8080/judge/c...

hdu 题目1496 Equations , POJ 题目1840 Eqs (整数Hash)

hdu 题目1496 Equations 题目翻译:  给出一个等式  a*x1^2+b*x2^2+c*x3^2+d*x4^2 = 0, a,b,c,d 范围 [-50,50]; x1,x...

POJ 1840 Eqs(Hash+思维)

poj 1840题目大意 求方程a1x31a_1x_1^3+a2x32a_2x_2^3+ a3x33a_3x_3^3+ a4x34a_4x_4^3+ a5x35a_5x_5^3=0 解的个数,ai...
  • mmy1996
  • mmy1996
  • 2016年08月30日 23:02
  • 114

POJ-1840 Eqs【Hash】

题目链接:http://poj.org/problem?id=1840 题目大意: 有以下等式:a1*x13+a2*x23+a3*x33+a4*x43+a5*x53=0.x1,x2,x3,x4,x...

poj 1840 Eqs

hash的应用,我直接映射了,差点超内存,听说有好的方法,这些数的范围还是很大的,-50^4*2·····50^4*2 ,但是最多才100*100个数,所以可以通过hash函数映射,懒得想了#inc...

poj 1840:Eqs

给定a1,a2,a3,a4,a5,求满足

POJ 1840 Eqs

思路:a1x1^3+ a2x2^3+ a3x3^3 = -(a4x4^3 + a5x5^3) 先求出右边能到达的值,对值进行hash,然后左边查询计数,这样比相反的顺序内存少用好多,时间也快不少 ...

STL的应用 POJ 1840 Eqs 题解

题目: Description Consider equations having the following form: a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0...

poj 1840 Eqs (哈希)

poj 1840 Eqs (哈希)

poj1840--Eqs

题目大意: a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 所有的变量的范围是【-50,50】,都是整数,求有多少解,也就是多少种情况满足这个等式。 算法分析:   ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 1840 Eqs(hash表)
举报原因:
原因补充:

(最多只允许输入30个字)