关闭

POJ 1840 Eqs(hash表)

381人阅读 评论(0) 收藏 举报
分类:

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;
}
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

(POJ 1840)Eqs 哈希表

Eqs Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 15893 Accepted: 7799 D...
  • STILLxjy
  • STILLxjy
  • 2016-10-01 20:59
  • 129

Poj 1840 Eqs(哈兮+复杂度)

Eqs Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 14031   Accepted: 6893 De...
  • Grit_ICPC
  • Grit_ICPC
  • 2015-08-10 16:49
  • 347

POJ 1840 ——Eqs 哈希,枚举

Eqs Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 11976 Accepted: 5...
  • u013014691
  • u013014691
  • 2014-08-01 20:19
  • 435

poj 3349 数组的hash(最常用、最普通的哈希表建立)

http://poj.org/problem?id=3349 Description You may have heard that no two snowflakes are alike...
  • u013573047
  • u013573047
  • 2015-01-01 18:05
  • 1701

POJ 1840:Eqs 哈希求解五元方程

Eqs Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 14169   Accepted:...
  • u010885899
  • u010885899
  • 2015-09-08 20:37
  • 210

【哈希&KMP模板题】-POJ-3461-Oulipo

题目链接:http://poj.org/problem?id=3461 题目大意:
  • u013303743
  • u013303743
  • 2014-04-26 15:54
  • 1123

POJ 1840 折半哈希

Eqs Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 14634 Accepted: 7181 Description...
  • qq_22902423
  • qq_22902423
  • 2015-12-12 16:49
  • 124

POJ 1840(哈希)

题目链接:http://poj.org/problem?id=1840 看到这道题第一感觉是很熟悉,想起hdu上的一道题。 不过不同的是,这道题如果采用相同方法去做,数组要开始6kw,需要用sho...
  • rachelsg
  • rachelsg
  • 2016-01-26 20:48
  • 74

poj 1840 (数学)

点击打开链接 政府对称,注意0的情况。。。 #include #include short mark1[25000001]; int main() { int a[105];...
  • yyf573462811
  • yyf573462811
  • 2013-05-09 09:12
  • 618

POJ 1840 (空间和时间的换)

#include #include using namespace std; static const int MAX = 100000; static int htable[MAX][10]; ...
  • ych_ding
  • ych_ding
  • 2013-09-06 20:40
  • 444
    个人资料
    • 访问:499518次
    • 积分:23388
    • 等级:
    • 排名:第346名
    • 原创:1887篇
    • 转载:0篇
    • 译文:0篇
    • 评论:68条
    最新评论