不得不说上次看得的这句话是多么对,再差的Hash表都比map好,hash表的查找速度可不是logn能够比的。

首先将5个部分拆成2+3,我们选取2的部分进行hash,然后再进行3重for循环。

动态申请内存还是比不上静态的啊。

代码如下:

动态申请内存:

#include <cstdio>
#include <cstring>
#include <cstdlib>
#define MOD 20003
using namespace std;int rec[105];struct Node
{int x;Node *next;
}e[20003];void Hash(int key)
{ Node *p = &e[abs(key)%MOD];Node *q = new Node;q->x = key;q->next = p->next;p->next = q;
}int find(int key)
{int ans = 0;Node *p = &e[abs(key) % MOD];while (p != NULL) {if (p->x == key) {++ans;}p = p->next;}return ans;
}int main()
{int a, b, c, d, e, ans, x; for (int i = -50; i <= 50; ++i) {rec[i+50] = i*i*i;}while (scanf("%d%d%d%d%d", &a, &b, &c, &d, &e) == 5) {ans = 0;for (int i = -50; i <= 50; ++i) {for (int j = -50; j <= 50; ++j) {x = -(a * rec[i+50] + b * rec[j+50]);if (i != 0 && j != 0) {Hash(x); }}}for (int i = -50; i <= 50; ++i) {//    printf("i = %d\n", i);for (int j = -50; j <= 50; ++j) {for (int k = -50; k <= 50; ++k) {if (i != 0 && j != 0 && k != 0) {x = c * rec[i+50] + d * rec[j+50] + e * rec[k+50];ans += find(x);}}}}printf("%d\n", ans);}return 0;
}

静态:

#include <cstdio>
#include <cstring>
#include <cstdlib>
#define MOD 20003
using namespace std;int rec[105], idx;struct Node
{int x, cnt, next;
}e[20003];int head[20003];void Hash(int key)
{ int flag = 0, x = key;key = abs(key) % MOD;for (int i = head[key]; i != -1; i = e[i].next) {if (e[i].x == x) {flag = 1;++e[i].cnt;}}if (!flag) {++idx;e[idx].x = x, e[idx].cnt = 1;e[idx].next = head[key];head[key] = idx;}
}int find(int key)
{int ans = 0, x = key;key = abs(key) % MOD; for (int i = head[key]; i != -1; i = e[i].next) {if (e[i].x == x) {ans += e[i].cnt;}}return ans;
}int main()
{int a, b, c, d, e, ans, x; for (int i = -50; i <= 50; ++i) {rec[i+50] = i*i*i;}while (scanf("%d%d%d%d%d", &a, &b, &c, &d, &e) == 5) {memset(head, 0xff, sizeof (head));idx = -1;ans = 0;for (int i = -50; i <= 50; ++i) {for (int j = -50; j <= 50; ++j) {x = -(a * rec[i+50] + b * rec[j+50]);if (i != 0 && j != 0) {Hash(x); }}}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) {x = c * rec[i+50] + d * rec[j+50] + e * rec[k+50];ans += find(x);}}}}printf("%d\n", ans);}return 0;
}

转载于:https://www.cnblogs.com/Lyush/archive/2012/07/12/2587569.html

POJ-1840 Eqs Hash表相关推荐

  1. poj 1840 Eqs

    题目连接 http://poj.org/problem?id=1840 Eqs Description Consider equations having the following form:  a ...

  2. POJ 1840 Eqs 解方程式, 水题 难度:0

    题目 http://poj.org/problem?id=1840 题意 给 与数组a[5],其中-50<=a[i]<=50,0<=i<5,求有多少组不同的x[5],使得a[0 ...

  3. 【POJ 3274】Gold Balanced Lineup (stl map )设计hash表,处理碰撞

    题目链接 题目链接 http://poj.org/problem?id=3274 题意 输入每头牛的特征的10进制,若i~j头牛中每个数位的特征相等则满足要求,求所有满足要求的j-i的最大值. 解题思 ...

  4. 从头到尾彻底解析Hash表算法

    从头到尾彻底解析Hash表算法 发布时间: 2013-10-02 10:26  阅读: 25156 次  推荐: 14   原文链接   [收藏]   作者:July.wuliming.pkuoliv ...

  5. 0x14.基础数据结构 — hash表与字符串hash

    目录 一.Hash表 1.AcWing 137. 雪花雪花雪花 0.hash表+链表 1.字符串的最小表示法 二.字符串hashhashhash 0.AcWing 138. 兔子与兔子 1.luogu ...

  6. 一步一步写算法(之hash表)

    [ 声明:版权全部,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] hash表,有时候也被称为散列表.个人觉得,hash表是介于链表和二叉树之间的一种中间结构.链 ...

  7. 转 从头到尾彻底解析Hash表算法

    出处:http://blog.csdn.net/v_JULY_v.   说明:本文分为三部分内容,     第一部分为一道百度面试题Top K算法的详解:第二部分为关于Hash表算法的详细阐述:第三部 ...

  8. C++实现Hash表

    C++实现Hash表的插入,删除,重建开放寻址法 #include<iostream>   using namespace std;      typedef int KeyType; / ...

  9. hash表建立 很久没写数据结构了

    /** auhtor:lx date 4.9 2011 brief hash table */ #include <stdio.h> #include <stdlib.h> # ...

最新文章

  1. 8个实用而有趣Bash命令提示行
  2. RabbitMQ 最常用的三大模式
  3. 直接用自己服务器做图床可以吗_我花 9 块钱搭了一个“私人图床”
  4. c# Task.Factory.StartNew 传参数_C#/C++混合编程一二事
  5. 互联网基建成果,快速实现一个clubhouse要多久
  6. Jquery自定义分页插件
  7. 检测文件是否有BOM 头,并删除BOM头(php)
  8. 程序设计与算法----动态规划之最长上升子序列
  9. Struts2 stracture
  10. C++_运算符重载 再思考
  11. 如何让遮罩层悬浮在object标签中
  12. PDF文档阅读必备的PDF阅读器
  13. 从ISSCC2021论文看未来技术发展趋势
  14. MFC中资源视图中对话框大小和实际像素尺寸显示问题
  15. html水平线变虚线,html水平线 虚线
  16. 1N4148的导通电压
  17. DQN、DDQN、Dueling DQN、PER DQN
  18. 使用rrdtool统计网站PV和IP
  19. 解读符合新时代主流的创客教育模式
  20. 树莓派4b署filebrowser+aria2

热门文章

  1. 微信小程序支付,带java源码
  2. [Spark][Python]groupByKey例子
  3. mybaits trim用法
  4. win2008 server_R2 自动关机 解决
  5. x264 n-th pass编码时候Stats文件的含义
  6. CCNP中单区域OSPF详解(第一部分)
  7. 智能机浏览器版本信息获取
  8. 功率谱和频谱的区别、联系
  9. ubuntu19.10安装deepin的微信和qq(转载+自己在新系统上验证)
  10. spark 常用函数介绍(python)