解方程整数解的题,通过这道题我学会了这种题的一般做法,对于未知数较少、取值范围较小且解为整数的方程,把一半的未知数移到等式的另一边,然后对两边分别枚举,用哈希配对,如果有相同的结果就找到一组解。具体做法是先把一边的结果插入hash表,再把另一边的结果在hash表里查找。

Eqs

Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other)
Total Submission(s) : 16   Accepted Submission(s) : 9
Problem Description
Consider equations having the following form: 
a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 
The coefficients are given integers from the interval [-50,50]. 
It is consider a solution a system (x1, x2, x3, x4, x5) that verifies the equation, xi∈[-50,50], xi != 0, any i∈{1,2,3,4,5}.

Determine how many solutions satisfy the given equation.

 
Input
The only line of input contains the 5 coefficients a1, a2, a3, a4, a5, separated by blanks.
 
Output
The output will contain on the first line the number of the solutions for the given equation.
 
Sample Input
37 29 41 43 47
 
Sample Output
654
 
Source
PKU
 
 
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <cstring>
  4. #include <stdlib.h>
  5. #include <cmath>
  6. #define seed 999983
  7. #define inf 0x7fffffff
  8. using namespace std;
  9.  
  10. struct Hash
  11. {
  12. int val,next;
  13. }h[];
  14.  
  15. int cnt;
  16. void Insert(int n)
  17. {
  18. int key=abs(n)%seed;
  19. // cout<<key<<endl;
  20. if(h[key].val==inf) //插入的位置没有值
  21. h[key].val=n;
  22. else //插入的位置已有值,冲突处理
  23. {
  24. int i,last;
  25. for(i=key;i!=-;i=h[i].next)
  26. last=i;
  27. i=last;
  28. for(;h[i].val!=inf;i=(i+)%);
  29. h[i].val=n;
  30. h[last].next=i;
  31. }
  32. }
  33.  
  34. void check(int n)
  35. {
  36. int key=abs(n)%seed;
  37. if(h[key].val==inf)
  38. return;
  39. else
  40. {
  41. int i;
  42. for(i=key;i!=-;i=h[i].next)
  43. if(h[i].val==n)
  44. {
  45. // cout<<n<<' '<<h[i].val<<' '<<h[i].next<<endl;
  46. cnt++;
  47. }
  48. return;
  49. }
  50. }
  51.  
  52. int main()
  53. {
  54. // freopen("in.txt","r",stdin);
  55. int a1,a2,a3,a4,a5;
  56. cnt=;
  57. scanf("%d%d%d%d%d",&a1,&a2,&a3,&a4,&a5);
  58. int i,j,k;
  59. memset(h,-,sizeof(h));
  60. for(i=;i<;i++)
  61. h[i].val=inf;
  62. for(i=-;i<=;i++)
  63. {
  64. if(i==) //注意未知数都不能为零
  65. continue;
  66. for(j=-;j<=;j++)
  67. {
  68. if(j==)
  69. continue;
  70. int tmp=-(a1*i*i*i+a2*j*j*j);
  71. // cout<<tmp<<endl;
  72. Insert(tmp);
  73. }
  74. }
  75. for(i=-;i<=;i++)
  76. {
  77. if(i==)
  78. continue;
  79. for(j=-;j<=;j++)
  80. {
  81. if(j==)
  82. continue;
  83. for(k=-;k<=;k++)
  84. {
  85. if(k==)
  86. continue;
  87. int tmp=a3*i*i*i+a4*j*j*j+a5*k*k*k;
  88. check(tmp);
  89. }
  90. }
  91. }
  92. printf("%d\n",cnt);
  93. return ;
  94. }

三部曲一(数据结构)-1024-Eqs的更多相关文章

  1. 三部曲一(数据结构)-1022-Gold Balanced Lineup

    Gold Balanced Lineup Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Othe ...

  2. 三部曲一(数据结构)-1020-Ultra-QuickSort

    通过这道题我大体理解了树状数组的原理和用法,完全用的别人的算法,我把别人算法看懂之后有自己敲了一遍,不得不说这算法真是高深巧妙啊,我开始看都看不懂,还是在别人的讲解下才看懂的,我觉得有必要写个博客记录 ...

  3. 三部曲一(数据结构)-1011-Sorting It All Out

    每次加入一个关系都要进行拓扑排序,不过在排序过程中需要判断是否出现多个入度为0的点,如果出现了就说明不能确定大小关系.不论出不出现多个入度为0的点拓扑排序都要进行到最后来判断是否出现环,因为一旦出现环 ...

  4. linux内核数据结构之kfifo

    1.前言 最近项目中用到一个环形缓冲区(ring buffer),代码是由linux内核的kfifo改过来的.缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度.例如一个进程A产 ...

  5. 浅谈算法和数据结构: 十 平衡查找树之B树

    前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种 ...

  6. Redis 5种数据结构使用及注意事项

    1优缺点 非常非常的快,有测评说比Memcached还快(当大家都是单CPU的时候),而且是无短板的快,读写都一般的快,所有API都差不多快,也没有MySQL Cluster.MongoDB那样更新同 ...

  7. redis 源码阅读 内部数据结构--字符串

    redis的内部数据结构主要有:字符串,双端链表,字典,跳跃表. 这里主要记录redise字符串的设计.相关的源码位于:src/sds.h 和 src/sds.c.   一 字符串 sds的结构体 s ...

  8. 转 浅谈算法和数据结构: 十 平衡查找树之B树

    前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为"在计算机科学中,B树(B-tre ...

  9. 标准BT.656并行数据结构

    转自网络,感谢原作者和转载者. 还有参考:百科http://baike.baidu.com/link?url=bqBT3S7pz_mRJoQE7zkE0K-R1RgQ6FmHNOZ0EjhlSAN_o ...

随机推荐

  1. Eclipse默认标签TODO,XXX,FIXME和自定义标签[转]

    http://www.blogjava.net/Guides/archive/2011/11/14/363686.html   Eclipse中的一些特殊的注释技术包括:    1.    // TO ...

  2. 关于.net编译时目标生成平台

    x86: 将程序集编译为由兼容 x86 的 32 位公共语言运行库运行. x64: 将程序集编译为由支持 AMD64 或 EM64T 指令集的计算机上的 64 位公共语言运行库运行. anycpu:( ...

  3. Flowplayer-JavaScript API

    source url: https://flowplayer.org/docs/api.html Global API access Use the flowplayer function to ge ...

  4. GaugeControl 数字时钟,温度计,仪表盘

    https://documentation.devexpress.com/#WindowsForms/CustomDocument18217 This topic will guide you thr ...

  5. 手机号码归属地查询api接口

    淘宝网 API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443 参数: tel:手机号码 返回:JSON ...

  6. Compounding绑定属性

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  7. 没有技术说明文档的开源都是耍流氓:微软Roslyn编译即服务在CIIP中具体应用(上)

    前段时间我发布了 github开源:企业级应用快速开发框架CIIP WEB+WIN+移动端,很多园友们都表示支持并与我探讨相关技术问题,上篇中我也承诺会写相关的技术文章,本篇就来介绍一下建模模块中使用 ...

  8. Oracle存储过程-自定义数据类型,集合,遍历取值

    摘要 Oracle存储过程,自定义数据类型,集合,遍历取值 目录[-] 0.前言 1.Packages 2.Packages bodies 3.输出结果 0.前言 在Oracle的存储过程中,可能会遇 ...

  9. java 注释

    单行注释// 多行注释/*  */ 注释并写入javadoc /**  */ // 这是单行注释的示例 /* 这个也是单行注释的示例 */ /* 这是第一个Java程序 *它将打印Hello Worl ...

  10. Django1.9开发博客(8)- 继续完善

    到现在为止我们已经完成的差不多了,并且基本的东西都已经学到了,是时候用起来了. 我们的博客还有很多功能需要完善,下面抛砖引玉新增几个功能,还有其他功能等你自己去发现和实现. 草稿箱 之前我们新建文章的 ...