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

  1. 37 29 41 43 47

Sample Output

  1. 654
  2.  
  3. 题意:
    给出5个数(<=50a1,a2,a3,a4,a5 ,分别与5个未知数的3次方 联立方程=0 a1x1^3+ a2x2^3+a3x3^3+ a4x4^3+ a5x5^3=0  |xi|<=50xi!=0 求有多少组解。
  1. 题解
    二分+map标记,先暴力出x1,x2,x3对应的a1x13+ a2x23+ a3x33 存入数组中,再对应暴力 二分查找出等于 负的a4*x43次方+a5*x53次方 相应的下标 及对应个数;
  2. 代码:
  1. #include <cstdio>
  2. #include <cmath>
  3. #include <cstring>
  4. #include <ctime>
  5. #include <iostream>
  6. #include <algorithm>
  7. #include <set>
  8. #include <vector>
  9. #include <queue>
  10. #include <map>
  11. #include <stack>
  12. #define MOD 1000000007
  13. #define maxn 20000001
  14. using namespace std;
  15. typedef long long LL;
  16. int read()
  17. {
  18. int x=,f=;
  19. char ch=getchar();
  20. while(ch<''||ch>'')
  21. {
  22. if(ch=='-')f=-;
  23. ch=getchar();
  24. }
  25. while(ch>=''&&ch<='')
  26. {
  27. x=x*+ch-'';
  28. ch=getchar();
  29. }
  30. return x*f;
  31. }
  32. //*******************************************************************
  33. __int64 a[];
  34. map< int ,int > mp;
  35. int t;
  36. int jug(__int64 x)
  37. {
  38.  
  39. int l=;
  40. int r=t;
  41. int xx;
  42. int mid;
  43. while(l<=r)
  44. {
  45. mid=(l+r)/;
  46. if(a[mid]>x)
  47. {
  48. r=mid-;
  49. }
  50. else if(a[mid]<x)
  51. {
  52. l=mid+;
  53. if(a[l]==x)return mp[x];
  54. }
  55. else return mp[x];
  56. }
  57. return ;
  58. }
  59. int main()
  60. {
  61.  
  62. int a1,a2,a3,a4,a5;
  63. t=;
  64. scanf("%d%d%d%d%d",&a1,&a2,&a3,&a4,&a5);
  65. for(int x1=-; x1<=; x1++)
  66. {
  67. if(x1==) continue;
  68. for(int x2=-; x2<=; x2++)
  69. {
  70. if(x2==)continue;
  71. a[++t]=(a1*x1*x1*x1+a2*x2*x2*x2);
  72. if(mp.count(a[t]))
  73. mp[a[t]]++;
  74. else mp[a[t]]=;
  75. }
  76. }
  77. sort(a+,a+t+);
  78. int ans=;
  79. for(int x3=-; x3<=; x3++)
  80. {
  81. if(x3==)continue;
  82. for(int x4=-; x4<=; x4++)
  83. {
  84. if(x4==) continue;
  85. for(int x5=-; x5<=; x5++)
  86. {
  87. if(x5==) continue;
  88. __int64 aaa=-*(a3*x3*x3*x3+x4*a4*x4*x4+a5*x5*x5*x5);
  89. ans+=jug(aaa);
  90. }
  91. }
  92. }
  93. printf("%d\n",ans);
  94. return ;
  95. }
  1.   这是哈希标记法
  1. #include <cstdio>
  2. #include <cmath>
  3. #include <cstring>
  4. #include <ctime>
  5. #include <iostream>
  6. #include <algorithm>
  7. #include <set>
  8. #include <vector>
  9. #include <queue>
  10. #include <map>
  11. #include <stack>
  12. #define maxn 25000000
  13. #define inf 1000000007
  14. using namespace std;
  15. typedef long long LL;
  16. int read()
  17. {
  18. int x=,f=;
  19. char ch=getchar();
  20. while(ch<''||ch>'')
  21. {
  22. if(ch=='-')f=-;
  23. ch=getchar();
  24. }
  25. while(ch>=''&&ch<='')
  26. {
  27. x=x*+ch-'';
  28. ch=getchar();
  29. }
  30. return x*f;
  31. }
  32. //**********************************************************
  33.  
  34. short hash[];
  35. int main()
  36. {
  37. int a1,a2,a3,a4,a5,x1,x2,x3,x4,x5,sum;
  38. scanf("%d%d%d%d%d",&a1,&a2,&a3,&a4,&a5);
  39. memset(hash,,sizeof(hash));
  40. for(x1=-; x1<=; x1++)
  41. {
  42. if(x1==)
  43. continue;
  44. for(x2=-; x2<=; x2++)
  45. {
  46. if(x2==)
  47. continue;
  48. sum=(a1*x1*x1*x1+a2*x2*x2*x2)*-;
  49. if(sum<)sum+=maxn;
  50. hash[sum]++;
  51. }
  52. }
  53. int cnt = ;
  54. for(x3=-; x3<=; x3++)
  55. {
  56. if(x3==)
  57. continue;
  58. for(x4=-; x4<=; x4++)
  59. {
  60. if(x4==)
  61. continue;
  62. for(x5=-; x5<=; x5++)
  63. {
  64. if(x5==)
  65. continue;
  66. sum=a3*x3*x3*x3+a4*x4*x4*x4+a5*x5*x5*x5;
  67. if(sum<)sum+=maxn;
  68. cnt+=hash[sum];
  69. }
  70. }
  71. }
  72. printf("%d\n",cnt);
  73. return ;
  74. }
  1.  

POJ 1840 Eqs 二分+map/hash的更多相关文章

  1. poj 1840 Eqs (hash)

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

  2. poj 1840 Eqs 【解五元方程+分治+枚举打表+二分查找所有key 】

    Eqs Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 13955   Accepted: 6851 Description ...

  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 解方程式, 水题 难度:0

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

  5. POJ 1840 Eqs

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

  6. POJ 1840 Eqs(乱搞)题解

    思路:这题好像以前有类似的讲过,我们把等式移一下,变成 -(a1*x1^3 + a2*x2^3)== a3*x3^3 + a4*x4^3 + a5*x5^3,那么我们只要先预处理求出左边的答案,然后再 ...

  7. POJ 1840 Eqs 暴力

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

  8. POJ 2503 Babelfish(map,字典树,快排+二分,hash)

    题意:先构造一个词典,然后输入外文单词,输出相应的英语单词. 这道题有4种方法可以做: 1.map 2.字典树 3.快排+二分 4.hash表 参考博客:[解题报告]POJ_2503 字典树,MAP ...

  9. poj 2318 叉积+二分

    TOYS Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13262   Accepted: 6412 Description ...

随机推荐

  1. FIDO 标准简介

    FIDO 联盟(Fast IDentity Online Alliance)简介 网站:http://fidoalliance.org FIDO Alliance,成立于2012年7月. FIDO的目 ...

  2. hdu2457

    AC自动机+DP #include <cstdio> #include <queue> #include <cstring> using namespace std ...

  3. 22. javacript高级程序设计-高级技巧

    1. 高级技巧 1.1 函数 l 可以使用惰性载入函数,将任何分支推迟到第一个调用函数的时候 l 函数绑定可以让你创建始终在指定环境中运行的函数,同时函数柯里化可以让你创建已经填写了某些参数的函数 l ...

  4. percona-toolkit 之 【pt-deadlock-logger】说明

    摘要: 死锁:是指两个或则多个事务在同一个资源上相互占用,并请求锁定对方占用的资源,而导致恶性循环的现象:当产生死锁的时候,MySQL会回滚一个小事务的SQL,确保另一个完成.上面是死锁的概念,而在M ...

  5. Python: 安装BeautifulSoup4

    python3.4.3 安装BeautifulSoup4: 使用pip install 安装: 在命令行cmd之后输入,pip install BeautifulSoup4 BeautifulSoup ...

  6. Mathematics:Pseudoprime numbers(POJ 3641)

     强伪素数 题目大意:利用费马定理找出强伪素数(就是本身是合数,但是满足费马定理的那些Carmichael Numbers) 很简单的一题,连费马小定理都不用要,不过就是要用暴力判断素数的方法先确定是 ...

  7. 关于定时器 setTimeout

    1.这里不考虑线程问题.把javascript想象成在时间线上运行,页面载入时,首先执行的是<script>标签中的代码,之后,将执行更多代码,当进程空闲时,下个代码就被触发并执行 如图: ...

  8. 【leetcode】Restore IP Addresses (middle)

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  9. UVA 10815 Andy's First Dictionary ---set

    题目链接 题意:输入一个文本,找出所有不同的单词(连续的字母序列),按字典序从小到大输出.单词不区分大小写. 刘汝佳算法竞赛入门经典(第二版)P112 #include <iostream> ...

  10. ios滑动手势全屏(这段代码实现了下一级控制器滑到上一级控制器)

    在自定义导航控制器里面加以下代码就增加全屏滑动手势 >推向前一个控制器 //  HBNavigationController.m // #import "HBNavigationCon ...