POJ 1840 Eqs(hash)
题意 输入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即可了 这样分别枚举左右两边 把左边出现过的结果都存在一个数组里面 再枚举右边 没出现一次结果 答案就加上前面这个结果出现的次数
枚举完就出现答案了
- #include<cstdio>
- #include<cstring>
- using namespace std;
- const int maxs = 50 * 50 * 50 * 50 * 4 + 10;
- unsigned short cnt[maxs];
- int main()
- {
- int a1, a2, a3, a4, a5, sum,ans=0;
- scanf ("%d%d%d%d%d", &a1, &a2, &a3, &a4, &a5);
- for (int x1 = -50; x1 <= 50; ++x1)
- {
- if (x1 == 0) ++x1;
- for (int x2 = -50; x2 <= 50; ++x2)
- {
- if (x2 == 0) ++x2;
- sum = (a1 * x1 * x1 * x1 + a2 * x2 * x2 * x2) * (-1);
- if (sum < 0) ++cnt[sum + maxs];
- else ++cnt[sum];
- }
- }
- for (int x3 = -50; x3 <= 50; ++x3)
- {
- if (x3 == 0) ++x3;
- for (int x4 = -50; x4 <= 50; ++x4)
- {
- if (x4 == 0) ++x4;
- for (int x5 = -50; x5 <= 50; ++x5)
- {
- if (x5 == 0) ++x5;
- sum = (a3 * x3 * x3 * x3 + a4 * x4 * x4 * x4 + a5 * x5 * x5 * x5) ;
- if (sum < 0) sum += maxs;
- ans += cnt[sum];
- }
- }
- }
- printf ("%d\n", ans);
- return 0;
- }
Description
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
Output
Sample Input
- 37 29 41 43 47
Sample Output
- 654
还实用hashmap做的 空间优化了不少
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<hash_map>
- using namespace std;
- int first[50*50*50+10];
- int ecnt,w[10005],v[10005],nex[10005];
- void add(int x)
- {
- int t=(x+50*50*50*100)/200,flag=1;
- for(int e=first[t];(~e)&&flag;e=nex[e])
- {
- if(v[e]==x)
- {
- flag=0,w[e]++;
- }
- }
- if(flag)
- {
- w[ecnt]=1;
- v[ecnt]=x;
- nex[ecnt]=first[t];
- first[t]=ecnt++;
- }
- }
- int getcnt(int x)
- {
- if(x>50*50*50*50*2||x<-50*50*50*50*2)return 0;
- int t=(x+50*50*50*100)/200;
- for(int e=first[t];(~e);e=nex[e])
- {
- if(v[e]==x)return w[e];
- }
- return 0;
- }
- int main()
- {
- int a1, a2, a3, a4, a5, sum,ans=0;
- scanf ("%d%d%d%d%d", &a1, &a2, &a3, &a4, &a5);
- memset(first,-1,sizeof first);
- ecnt=0;
- for (int x1 = -50; x1 <= 50; ++x1)
- {
- if (x1 == 0) ++x1;
- for (int x2 = -50; x2 <= 50; ++x2)
- {
- if (x2 == 0) ++x2;
- sum = (a1 * x1 * x1 * x1 + a2 * x2 * x2 * x2) * (-1);
- add(sum);
- }
- }
- for (int x3 = -50; x3 <= 50; ++x3)
- {
- if (x3 == 0) ++x3;
- for (int x4 = -50; x4 <= 50; ++x4)
- {
- if (x4 == 0) ++x4;
- for (int x5 = -50; x5 <= 50; ++x5)
- {
- if (x5 == 0) ++x5;
- sum = (a3 * x3 * x3 * x3 + a4 * x4 * x4 * x4 + a5 * x5 * x5 * x5) ;
- ans +=getcnt(sum);
- }
- }
- }
- printf ("%d\n", ans);
- return 0;
- }
POJ 1840 Eqs(hash)的更多相关文章
- poj 1840 Eqs (hash)
题目:http://poj.org/problem?id=1840 题解:http://blog.csdn.net/lyy289065406/article/details/6647387 小优姐讲的 ...
- POJ 1840 Eqs 二分+map/hash
Description Consider equations having the following form: a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 The co ...
- POJ 1840 Eqs
Eqs Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 15010 Accepted: 7366 Description ...
- POJ 1840 Eqs 解方程式, 水题 难度:0
题目 http://poj.org/problem?id=1840 题意 给 与数组a[5],其中-50<=a[i]<=50,0<=i<5,求有多少组不同的x[5],使得a[0 ...
- POJ 1840 Eqs(乱搞)题解
思路:这题好像以前有类似的讲过,我们把等式移一下,变成 -(a1*x1^3 + a2*x2^3)== a3*x3^3 + a4*x4^3 + a5*x5^3,那么我们只要先预处理求出左边的答案,然后再 ...
- poj 1840 Eqs 【解五元方程+分治+枚举打表+二分查找所有key 】
Eqs Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 13955 Accepted: 6851 Description ...
- POJ 1840 Eqs 暴力
Description Consider equations having the following form: a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 The ...
- 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, ...
- POJ 1840 HASH
题目链接:http://poj.org/problem?id=1840 题意:公式a1x1^3+ a2x2^3+ a3x3^3+ a4x4^3+ a5x5^3=0,现在给定a1~a5,求有多少个(x1 ...
随机推荐
- C语言集锦(三)Direct3D和GDI+的例子
0.前言 有些时候你可能想了解,如何用纯C语言来写Direct3D和GDI+的Demo.注意,下面的Direct3D例子不适用于TCC编译器,GDI+的例子是可以的. 1.Direct3D C语言的例 ...
- 属性动画详解一(Property Animation)
效果图: Android动画有3类: 1.View Animation (Tween Animation) 2.Drawable Animation (Frame Animation) 2.Prope ...
- Codeforces 754A(搜索)
设s[i][j]为序列i到j的和,当s[i][j]≠0时,即可从i跳到j+1.目标为从1跳到n+1,所以按照题意暴力即可. #include <bits/stdc++.h> using n ...
- 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 ...
- python画直线
#!/usr/bin/env python import matplotlib.pyplot as plt import numpy as np #beita = 1 #gama = 0.5 #x:f ...
- Python 集成开发环境(IDE)
DiscoverSDK网站进行了一次调查 - 什么是最好的Python IDE,这里是调查的结果 Python是一种非常流行的开源编程语言.得益于无尽的模块选项,Python今天广泛用于脚本 ...
- Android开发初期之后怎么提升?怎么才能叫精通?方向在哪?
hi大头鬼hi Android开发专家 先mark一下,好多人我发现始终停留在两三年的水平上没有突破. 另外还有一个误区就是越底层越牛逼 第三个就是,我认识的大部分所谓的做过rom开发的对fr ...
- springboot + mybatis配置多数据源示例
转:http://www.jb51.net/article/107223.htm 在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源. 代码结构: 简要原理: 1)Datab ...
- GlusterFS源代码解析 —— GlusterFS 内存分配方式
原文地址:http://blog.csdn.net/wangyuling1234567890/article/details/24564891 GlusterFS 的内存分配主要有两种方式,一种是内存 ...
- Solidworks如何使用Toolbox
Toolbox不仅仅是智能扣件.事实上,一般常见的轴承,螺栓,齿轮都有了,点击右侧的设计库即可展开Toolbox 配置完成后我只留下一个GB 比如我要选一个圆锥滚子轴承,从右边拖进来即可 ...