方程的解数
Time Limit: 15000MS   Memory Limit: 128000K
Total Submissions: 7084   Accepted: 2431
Case Time Limit: 5000MS

Description

已知一个n元高次方程: 
 
其中:x1, x2,...,xn是未知数,k1,k2,...,kn是系数,p1,p2,...pn是指数。且方程中的所有数均为整数。 
假设未知数1 <= xi <= M, i=1,,,n,求这个方程的整数解的个数。 
1 <= n <= 6;1 <= M <= 150。 
 
方程的整数解的个数小于231。 
★本题中,指数Pi(i=1,2,...,n)均为正整数。 

Input

第1行包含一个整数n。第2行包含一个整数M。第3行到第n+2行,每行包含两个整数,分别表示ki和pi。两个整数之间用一个空格隔开。第3行的数据对应i=1,第n+2行的数据对应i=n。

Output

仅一行,包含一个整数,表示方程的整数解的个数。

Sample Input

3
150
1  2
-1  2
1  2

Sample Output

178

解题思路:这道题直接暴搜肯定回TLE,这里用一点点技巧,把n分成两半,将左边的n/2个数的所有可能情况放入到哈希表中,那么在枚举右边n/2个数时可以直接通过哈希查询,这样可以很快的求解。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int MAX = 4000000;
struct Hash
{int val;int count;
}HashTable[MAX];
int n,m,ans;
int k[6],p[6];
bool used[MAX];int getpow(int x, int p)
{  int tmp = 1;  while(p) {  if(p & 1) tmp *= x;  x *= x;  p >>= 1;  }  return tmp;
}  int searchHash(int s)
{int tmp = s;tmp = (tmp % MAX + MAX) % MAX;while(used[tmp] && HashTable[tmp].val != s){tmp++;tmp = (tmp % MAX + MAX) % MAX;}return tmp;
}void insert(int s)
{int pos = searchHash(s);HashTable[pos].val = s;HashTable[pos].count++;used[pos] = true;
}void leftHalf(int d,int s)
{if(d == n / 2){insert(s);return;}for(int i = 1; i <= m; i++)leftHalf(d+1,s + k[d] * getpow(i,p[d]));
}void rightHalf(int d,int s)
{if(d == n){s = -s;int pos = searchHash(s);if(HashTable[pos].val == s)ans += HashTable[pos].count;return;}for(int i = 1; i <= m; i++)rightHalf(d+1,s + k[d] * getpow(i,p[d]));
}int main()
{scanf("%d%d",&n,&m);for(int i = 0; i < n; i++)scanf("%d%d",&k[i],&p[i]);leftHalf(0,0);rightHalf(n/2,0);printf("%d\n",ans);return 0;
}

poj 1186 方程的解数(线性探测再哈希)相关推荐

  1. 哈希查找解决地址冲突的两种最常见方法(线性探测再散列,链地址法)C++实现

    哈希查找解决地址冲突的两种最常见方法(线性探测再散列,链地址法)C++实现 参考文章: (1)哈希查找解决地址冲突的两种最常见方法(线性探测再散列,链地址法)C++实现 (2)https://www. ...

  2. 散列表相关题目(线性探测再散列法)

    散列表相关题目(线性探测再散列法) 一.题目 将关键字序列(7.8.30.11.18.9.14)散列存储到散列表中.散列表的存储空间是一个下标从0开始的一维数组,散列函数为H(key)=(key×3) ...

  3. Hash(散列)冲突解决之线性探测再散列和二次探测再散列

    线性探测再散列 H(key) = key %13,key 为关键字,采用开放地址法中的线性探测再散列解决冲突,依次输入11 个关键字,16,74,60,43,54,90,46,31,29,88,77, ...

  4. Hash(散列)冲突解决 线性探测再散列和二次探测再散列

    线性探测再散列 例如  哈希函数为: H(key) =  key %13,key 为关键字,采用开放地址法中的线性探测再散列解决冲突,依次输入 11 个关键字,16,74,60,43,54,90,46 ...

  5. 【哈希冲突解决】线性探测再散列和二次探测再散列

    定义 散列(Hashing)是计算机科学中一种对资料的处理方法,通过某种特定的函数/算法(称为散列函数/算法)将要检索的项与用来检索的索引(称为散列,或者散列值)关联起来,生成一种便于搜索的数据结构( ...

  6. 【哈希表】线性探测再散列的相关知识与计算

    注意概念: 装填因子 等概率下查找成功的平均查找长度 等概率下查找不成功的平均查找长度 线性探测再散列时以 存储空间的长度来取余 查找时比较次数,如在 {12}中查找12,12跟12也要进行一次比较. ...

  7. java描述线性探测_实现基于线性探测的哈希表1

    课程资料链接:https://pan.baidu.com/s/1gQksMmhPR-2MwNjf6IdGHA 提取码:91gv 课程详细内容: 001.数据结构与算法概述1 002.数据结构与算法概述 ...

  8. 数据结构课程设计------c实现散列表(二次探测再哈希)电话簿(文件存储)

    题目二 :散列表的设计与实现 2.1问题描述 设计散列表实现电话号码查找系统,使得平均查找长度不超过2 基本要求 (1)设每个记录有下列数据项:电话号码.用户名.地址: (2)从键盘输入各记录,以电话 ...

  9. 线性探测再散列法计算asl

    再散列和平方散列不同,再散列是遇到冲突时前进一位. 计算查找失败的平均查找长度,要特别注意防止思维定式,在查找失败的情况下,既不是根据表中的元素个数,也不是根据表长来计算平均查找长度.查找失败时,在等 ...

最新文章

  1. python从入门到精通怎么样-Python从入门到精通:一个月就够了
  2. Windows和Linux双系统时间不对的问题。
  3. python win10 arm_windows10 arm版下载-windows10arm镜像64位中文版 - 极光下载站
  4. sublime php快捷键,sublime快捷键
  5. 拓端tecdat|Python中基于网格搜索算法优化的深度学习模型分析糖尿病数据
  6. 记所内部“与顶级会议作者面对面”系列学术活动交流感受
  7. ConnectionString 最简便写法 for MSSQL 2005 EXPRESS
  8. 最全企业级数仓建设迭代版
  9. 复变函数 —— 2. 复函数的导数与复变函数的导数(柯西黎曼方程)的定义
  10. 高等数学(第七版)同济大学 习题5-2 个人解答
  11. 《出版专业实务·初级(2020版)》学习笔记
  12. 成功解决python.exe 无法找到入口 无法定位程序输入点
  13. 删除威金病毒残留的_desktop.ini文件(转贴)
  14. python 频谱图_SciPy spectrogram:计算频谱图
  15. ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十二节--小结,Bootstrap Table之角色管理
  16. 0ctf_2016_unserialize
  17. android qq音乐歌词怎么实现,歌词翻译利器 QQ音乐Android3.9.5版本全新上线
  18. 图像空间滤波总结(平滑空间滤波器及锐化空间滤波器)
  19. 一篇关于大黄蜂的鸡汤文的杂想
  20. ① Mysql- Create/表操作语句

热门文章

  1. MongoDB进阶-内嵌文档查询
  2. 理解 Dubbo 服务引用
  3. Unity-2017.2官方实例教程Roll-a-ball(一)
  4. Windows Phone 7应用之Tencent微博——封装API[上篇]
  5. 云管理成功的关键:应用工作流
  6. java使用JDBC连接数据库的几种方式
  7. [转]T4模版引擎之生成数据库实体类
  8. Ivan D Jankovic PhD Studentship** Application
  9. we need to have frequent contact for relationships for transferring from aca to career
  10. 我的第一篇学术论文发表出来啦啦啦啊!!!