题意  输入a1,a2,a3,a4,a5  求有多少种不同的x1,x2,x3,x4,x5序列使得等式成立   a,x取值在-50到50之间

直接暴力的话肯定会超时的   100的五次方  10e了都    然后能够考虑将等式变一下形   把a1*x1^3+a2*x2^3移到右边   也就是-(a1*x1^3+a2^x2^3)=a3*x3^3+a4*x4^3+a5*x5^3

考虑到a1*x1^3+a2^x2^3的最大值50*50^3+50*50^3=12500000  这个数并不大  能够开这么大的数组把每一个结果出现的次数存下来   又由于结果最小可能是负的12500000   负数不能做数组的下标   加上个12500000*2即可了   这样分别枚举左右两边   把左边出现过的结果都存在一个数组里面    再枚举右边   没出现一次结果  答案就加上前面这个结果出现的次数
   枚举完就出现答案了

  1. #include<cstdio>
  2. #include<cstring>
  3. using namespace std;
  4. const int maxs = 50 * 50 * 50 * 50 * 4 + 10;
  5. unsigned short cnt[maxs];
  6. int main()
  7. {
  8. int a1, a2, a3, a4, a5, sum,ans=0;
  9. scanf ("%d%d%d%d%d", &a1, &a2, &a3, &a4, &a5);
  10. for (int x1 = -50; x1 <= 50; ++x1)
  11. {
  12. if (x1 == 0) ++x1;
  13. for (int x2 = -50; x2 <= 50; ++x2)
  14. {
  15. if (x2 == 0) ++x2;
  16. sum = (a1 * x1 * x1 * x1 + a2 * x2 * x2 * x2) * (-1);
  17. if (sum < 0) ++cnt[sum + maxs];
  18. else ++cnt[sum];
  19. }
  20. }
  21.  
  22. for (int x3 = -50; x3 <= 50; ++x3)
  23. {
  24. if (x3 == 0) ++x3;
  25. for (int x4 = -50; x4 <= 50; ++x4)
  26. {
  27. if (x4 == 0) ++x4;
  28. for (int x5 = -50; x5 <= 50; ++x5)
  29. {
  30. if (x5 == 0) ++x5;
  31. sum = (a3 * x3 * x3 * x3 + a4 * x4 * x4 * x4 + a5 * x5 * x5 * x5) ;
  32. if (sum < 0) sum += maxs;
  33. ans += cnt[sum];
  34. }
  35. }
  36. }
  37. printf ("%d\n", ans);
  38. return 0;
  39. }
Eqs

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

还实用hashmap做的  空间优化了不少

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<hash_map>
  5. using namespace std;
  6. int first[50*50*50+10];
  7. int ecnt,w[10005],v[10005],nex[10005];
  8.  
  9. void add(int x)
  10. {
  11. int t=(x+50*50*50*100)/200,flag=1;
  12. for(int e=first[t];(~e)&&flag;e=nex[e])
  13. {
  14. if(v[e]==x)
  15. {
  16. flag=0,w[e]++;
  17. }
  18. }
  19. if(flag)
  20. {
  21. w[ecnt]=1;
  22. v[ecnt]=x;
  23. nex[ecnt]=first[t];
  24. first[t]=ecnt++;
  25. }
  26. }
  27. int getcnt(int x)
  28. {
  29. if(x>50*50*50*50*2||x<-50*50*50*50*2)return 0;
  30. int t=(x+50*50*50*100)/200;
  31. for(int e=first[t];(~e);e=nex[e])
  32. {
  33. if(v[e]==x)return w[e];
  34. }
  35. return 0;
  36. }
  37. int main()
  38. {
  39. int a1, a2, a3, a4, a5, sum,ans=0;
  40. scanf ("%d%d%d%d%d", &a1, &a2, &a3, &a4, &a5);
  41. memset(first,-1,sizeof first);
  42. ecnt=0;
  43. for (int x1 = -50; x1 <= 50; ++x1)
  44. {
  45. if (x1 == 0) ++x1;
  46. for (int x2 = -50; x2 <= 50; ++x2)
  47. {
  48. if (x2 == 0) ++x2;
  49. sum = (a1 * x1 * x1 * x1 + a2 * x2 * x2 * x2) * (-1);
  50. add(sum);
  51. }
  52. }
  53. for (int x3 = -50; x3 <= 50; ++x3)
  54. {
  55. if (x3 == 0) ++x3;
  56. for (int x4 = -50; x4 <= 50; ++x4)
  57. {
  58. if (x4 == 0) ++x4;
  59. for (int x5 = -50; x5 <= 50; ++x5)
  60. {
  61. if (x5 == 0) ++x5;
  62. sum = (a3 * x3 * x3 * x3 + a4 * x4 * x4 * x4 + a5 * x5 * x5 * x5) ;
  63. ans +=getcnt(sum);
  64. }
  65. }
  66. }
  67. printf ("%d\n", ans);
  68. return 0;
  69. }

POJ 1840 Eqs(hash)的更多相关文章

  1. poj 1840 Eqs (hash)

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

  2. POJ 1840 Eqs 二分+map/hash

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

  3. POJ 1840 Eqs

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

  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(乱搞)题解

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

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

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

  7. POJ 1840 Eqs 暴力

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

  8. 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, ...

  9. POJ 1840 HASH

    题目链接:http://poj.org/problem?id=1840 题意:公式a1x1^3+ a2x2^3+ a3x3^3+ a4x4^3+ a5x5^3=0,现在给定a1~a5,求有多少个(x1 ...

随机推荐

  1. C语言集锦(三)Direct3D和GDI+的例子

    0.前言 有些时候你可能想了解,如何用纯C语言来写Direct3D和GDI+的Demo.注意,下面的Direct3D例子不适用于TCC编译器,GDI+的例子是可以的. 1.Direct3D C语言的例 ...

  2. 属性动画详解一(Property Animation)

    效果图: Android动画有3类: 1.View Animation (Tween Animation) 2.Drawable Animation (Frame Animation) 2.Prope ...

  3. Codeforces 754A(搜索)

    设s[i][j]为序列i到j的和,当s[i][j]≠0时,即可从i跳到j+1.目标为从1跳到n+1,所以按照题意暴力即可. #include <bits/stdc++.h> using n ...

  4. Leetcode | Construct Binary Tree from Inorder and (Preorder or Postorder) Traversal

    Construct Binary Tree from Preorder and Inorder Traversal Given preorder and inorder traversal of a ...

  5. python画直线

    #!/usr/bin/env python import matplotlib.pyplot as plt import numpy as np #beita = 1 #gama = 0.5 #x:f ...

  6. Python 集成开发环境(IDE)

      DiscoverSDK网站进行了一次调查 - 什么是最好的Python IDE,这里是调查的结果 ​​​Python是一种非常流行的开源编程语言.得益于无尽的模块选项,Python今天广泛用于脚本 ...

  7. Android开发初期之后怎么提升?怎么才能叫精通?方向在哪?

    hi大头鬼hi Android开发专家     先mark一下,好多人我发现始终停留在两三年的水平上没有突破. 另外还有一个误区就是越底层越牛逼 第三个就是,我认识的大部分所谓的做过rom开发的对fr ...

  8. springboot + mybatis配置多数据源示例

    转:http://www.jb51.net/article/107223.htm 在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源. 代码结构: 简要原理: 1)Datab ...

  9. GlusterFS源代码解析 —— GlusterFS 内存分配方式

    原文地址:http://blog.csdn.net/wangyuling1234567890/article/details/24564891 GlusterFS 的内存分配主要有两种方式,一种是内存 ...

  10. Solidworks如何使用Toolbox

    Toolbox不仅仅是智能扣件.事实上,一般常见的轴承,螺栓,齿轮都有了,点击右侧的设计库即可展开Toolbox   配置完成后我只留下一个GB   比如我要选一个圆锥滚子轴承,从右边拖进来即可   ...