一道典型的hash问题:

已知a1,a2,a3,a4,a5,求有多少种不同的<x1,x2,x3,x4,x5>组合满足等式:

a1*x1^3 + a2*x2^3 + a3*x3^3 + a4*x4^3 + a5*x5^3 = 0

一种做法是暴力枚举,但因为xi∈[-50,-1)(1,50],所以暴力枚举时间为O(100^5),显然不可行。

所以只能用hash方法:

我们可以讲前两项 a1*x1^3 + a2*x2^3 的所有可能多项式结果SUM运算出来,并将这些SUM映射到hash表上。因为可能存在不同的<x1,x2>元组,但他们的SUM相同,会映射到hash表上相同的indice上,对于这种情况,我们采用hash[<x1,x2>::SUM]++的处理方式,最终hash表上所有indice上hash值不为0的值相加就是前两项所有可能的SUM。同时,因为存在运算结果为负值的情况,(因为ai, xi都∈[-50,-1)(1,50],所以前两项的SUM∈[-12500000,12500000]。为了不让映射的下标为负数,当SUM>=0时,KEY=SUM;当SUM<0时,KEY=SUM+12500000. 同时为了保证所有可能的SUM都能够hash到表上的indice,hash数组的规模需开到25000001.

--------------------------------------------------------------------------------------

然后我们继续枚举下面三项a3*x3^3 + a4*x4^3 + a5*x5^3 的所有可能SUM并求出KEY,

KEY一样采用上面的做法:当SUM>=0时,KEY=SUM;当SUM<0时,KEY=SUM+12500000.

当我们用(-KEY)去查hash表时,如果hash[0-KEY]>0,说明hash表上有记录,也意味着当前枚举的三元组<x3,x4,x5>找到了一个<x1,x2>使得整体的SUM=0,即找到一个方程的解。统计解的个数即为最终结果。

 #include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<map>
#include<vector>
using namespace std;
const int max_size=;
short hsh[max_size];
int a1,a2,a3,a4,a5,ans;
int main(){
scanf("%d%d%d%d%d",&a1,&a2,&a3,&a4,&a5);
ans=;
memset(hsh,,sizeof(hsh));
for(int i=-;i<=;i++){
if(!i) continue;
for(int j=-;j<=;j++){
if(!j) continue;
int sum=;
for(int k=-;k<=;k++){
if(!k) continue;
sum=(-)*(i*i*i*a1+j*j*j*a2+k*k*k*a3);
if(sum<) sum+=max_size;
hsh[sum]++;
}
}
}
for(int i=-;i<=;i++){
if(!i) continue;
int sum=;
for(int j=-;j<=;j++){
if(!j) continue;
sum=i*i*i*a4+j*j*j*a5;
if(sum<) sum+=max_size;
if(hsh[sum]) ans+=hsh[sum];
}
}
printf("%d\n",ans);
}

POJ1840: Eqs(hash问题)的更多相关文章

  1. poj1840 Eqs(hash+折半枚举)

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

  2. POJ1840 Eqs

    题意描述 Eqs 求一个五元方程 \(a_1x_1^3+a_2x_2^3+a_3x_3^3+a_4x_4^3+a_5x_5^3=0\) 的解的个数. 题中给出 \(a_i\) 的值并且保证 \(-50 ...

  3. POJ 1840 Eqs(hash)

    题意  输入a1,a2,a3,a4,a5  求有多少种不同的x1,x2,x3,x4,x5序列使得等式成立   a,x取值在-50到50之间 直接暴力的话肯定会超时的   100的五次方  10e了都 ...

  4. POJ 1840 Eqs 二分+map/hash

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

  5. poj 1840 Eqs (hash)

    题目:http://poj.org/problem?id=1840 题解:http://blog.csdn.net/lyy289065406/article/details/6647387 小优姐讲的 ...

  6. POJ1840 hash

    POJ1840 问题重述: 给定系数a1,a2, ..,a5,求满足a1 * x1 ^ 3 + a2 * x2 ^ 3 +... + a5 * x5 ^ 3 = 0的 xi 的组数.其中ai, xi都 ...

  7. Eqs - poj 1840(hash)

    题意:对于方程:a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 ,有xi∈[-50,50], xi != 0, any i∈{1,2,3,4,5}. 现在给出a1,a2,a3, ...

  8. Eqs(枚举+ hash)

    http://poj.org/problem?id=1840 题意:给出系数a1,a2,a3,a4,a5,求满足方程的解有多少组. 思路:有a1x13+ a2x23+ a3x33+ a4x43+ a5 ...

  9. POJ 1840 Eqs

    Eqs Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 15010   Accepted: 7366 Description ...

随机推荐

  1. 谈谈GUI的配色和字体选择

    对于工控领域的显示屏,显示效果很难和电脑屏幕相比.电脑上操作系统或者各种软件的配色方案,在应用到工业控制屏上就会出现“完全不是所想要”的结果,所以工控领域GUI的色彩.字体的选择还是有特别的讲究. 配 ...

  2. 重启Finder

    解决Finder卡死的问题! 方法一:在Dock 图标上操作 按住 Option 键并右键点按 Finder 图标,选择菜单中的“重新开启” 方法二:在终端里操作 打开终端(应用程序 – 实用工具), ...

  3. hdu 3303 Harmony Forever (线段树 + 抽屉原理)

    http://acm.hdu.edu.cn/showproblem.php?pid=3303 Harmony Forever Time Limit: 20000/10000 MS (Java/Othe ...

  4. BZOJ 1688: [Usaco2005 Open]Disease Manangement 疾病管理

    Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) is running through the fa ...

  5. [转载]MongoDB开发学习(1)开天辟地,经典入门

    原文地址:http://www.cnblogs.com/xumingxiang/archive/2012/04/08/2437468.html 如果你从来没有接触MongoDB或对MongoDB有一点 ...

  6. 用 Maven 做项目构建

    转自:http://www.ibm.com/developerworks/cn/java/j-lo-maven/index.html 本文将介绍基于 Apache Maven 3 的项目构建的基本概念 ...

  7. hdu 4778

    知道是状态压缩,但是不会做: 看题解学的: dp[i]表示现在状态是i,先手-后手的分数. #include<cstdio> #include<cstring> #includ ...

  8. Firefly 性能测试 报告

    原地址:http://bbs.gameres.com/thread_223724.html Firefly 性能测试 主要考虑点 网络IO的并发 进程间通信压力 数据读写压力 测试机配置: 操作系统 ...

  9. centos 5.x 升级openssl

    今日想在centos 5.2上面安装mysql 5.5.37,在make的时候提示: Linking C shared module adt_null.so [ 65%] Built target a ...

  10. 李洪强iOS开发本人集成环信的经验总结_02_基本配置

     李洪强iOS开发本人集成环信的经验总结_02_基本配置 来到APPdelegate中做一些配置 01 - 导入头文件 02 - 在didFinishLaunchingWithOptions用法总结 ...