POJ 1840 Eqs 二分+map/hash
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
- 题意:
给出5个数(<=50)a1,a2,a3,a4,a5 ,分别与5个未知数的3次方 联立方程=0 为a1x1^3+ a2x2^3+a3x3^3+ a4x4^3+ a5x5^3=0 |xi|<=50并xi!=0 求有多少组解。
- 题解
二分+map标记,先暴力出x1,x2,x3对应的a1x13+ a2x23+ a3x33 ; 存入数组中,再对应暴力 去 二分查找出等于 负的a4*x43次方+a5*x53次方 相应的下标 及对应个数;- 代码:
- #include <cstdio>
- #include <cmath>
- #include <cstring>
- #include <ctime>
- #include <iostream>
- #include <algorithm>
- #include <set>
- #include <vector>
- #include <queue>
- #include <map>
- #include <stack>
- #define MOD 1000000007
- #define maxn 20000001
- using namespace std;
- typedef long long LL;
- int read()
- {
- int x=,f=;
- char ch=getchar();
- while(ch<''||ch>'')
- {
- if(ch=='-')f=-;
- ch=getchar();
- }
- while(ch>=''&&ch<='')
- {
- x=x*+ch-'';
- ch=getchar();
- }
- return x*f;
- }
- //*******************************************************************
- __int64 a[];
- map< int ,int > mp;
- int t;
- int jug(__int64 x)
- {
- int l=;
- int r=t;
- int xx;
- int mid;
- while(l<=r)
- {
- mid=(l+r)/;
- if(a[mid]>x)
- {
- r=mid-;
- }
- else if(a[mid]<x)
- {
- l=mid+;
- if(a[l]==x)return mp[x];
- }
- else return mp[x];
- }
- return ;
- }
- int main()
- {
- int a1,a2,a3,a4,a5;
- t=;
- scanf("%d%d%d%d%d",&a1,&a2,&a3,&a4,&a5);
- for(int x1=-; x1<=; x1++)
- {
- if(x1==) continue;
- for(int x2=-; x2<=; x2++)
- {
- if(x2==)continue;
- a[++t]=(a1*x1*x1*x1+a2*x2*x2*x2);
- if(mp.count(a[t]))
- mp[a[t]]++;
- else mp[a[t]]=;
- }
- }
- sort(a+,a+t+);
- int ans=;
- for(int x3=-; x3<=; x3++)
- {
- if(x3==)continue;
- for(int x4=-; x4<=; x4++)
- {
- if(x4==) continue;
- for(int x5=-; x5<=; x5++)
- {
- if(x5==) continue;
- __int64 aaa=-*(a3*x3*x3*x3+x4*a4*x4*x4+a5*x5*x5*x5);
- ans+=jug(aaa);
- }
- }
- }
- printf("%d\n",ans);
- return ;
- }
- 这是哈希标记法
- #include <cstdio>
- #include <cmath>
- #include <cstring>
- #include <ctime>
- #include <iostream>
- #include <algorithm>
- #include <set>
- #include <vector>
- #include <queue>
- #include <map>
- #include <stack>
- #define maxn 25000000
- #define inf 1000000007
- using namespace std;
- typedef long long LL;
- int read()
- {
- int x=,f=;
- char ch=getchar();
- while(ch<''||ch>'')
- {
- if(ch=='-')f=-;
- ch=getchar();
- }
- while(ch>=''&&ch<='')
- {
- x=x*+ch-'';
- ch=getchar();
- }
- return x*f;
- }
- //**********************************************************
- short hash[];
- int main()
- {
- int a1,a2,a3,a4,a5,x1,x2,x3,x4,x5,sum;
- scanf("%d%d%d%d%d",&a1,&a2,&a3,&a4,&a5);
- memset(hash,,sizeof(hash));
- for(x1=-; x1<=; x1++)
- {
- if(x1==)
- continue;
- for(x2=-; x2<=; x2++)
- {
- if(x2==)
- continue;
- sum=(a1*x1*x1*x1+a2*x2*x2*x2)*-;
- if(sum<)sum+=maxn;
- hash[sum]++;
- }
- }
- int cnt = ;
- for(x3=-; x3<=; x3++)
- {
- if(x3==)
- continue;
- for(x4=-; x4<=; x4++)
- {
- if(x4==)
- continue;
- for(x5=-; x5<=; x5++)
- {
- if(x5==)
- continue;
- sum=a3*x3*x3*x3+a4*x4*x4*x4+a5*x5*x5*x5;
- if(sum<)sum+=maxn;
- cnt+=hash[sum];
- }
- }
- }
- printf("%d\n",cnt);
- return ;
- }
POJ 1840 Eqs 二分+map/hash的更多相关文章
- poj 1840 Eqs (hash)
题目:http://poj.org/problem?id=1840 题解:http://blog.csdn.net/lyy289065406/article/details/6647387 小优姐讲的 ...
- poj 1840 Eqs 【解五元方程+分治+枚举打表+二分查找所有key 】
Eqs Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 13955 Accepted: 6851 Description ...
- POJ 1840 Eqs(hash)
题意 输入a1,a2,a3,a4,a5 求有多少种不同的x1,x2,x3,x4,x5序列使得等式成立 a,x取值在-50到50之间 直接暴力的话肯定会超时的 100的五次方 10e了都 ...
- 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
Eqs Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 15010 Accepted: 7366 Description ...
- POJ 1840 Eqs(乱搞)题解
思路:这题好像以前有类似的讲过,我们把等式移一下,变成 -(a1*x1^3 + a2*x2^3)== a3*x3^3 + a4*x4^3 + a5*x5^3,那么我们只要先预处理求出左边的答案,然后再 ...
- POJ 1840 Eqs 暴力
Description Consider equations having the following form: a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 The ...
- POJ 2503 Babelfish(map,字典树,快排+二分,hash)
题意:先构造一个词典,然后输入外文单词,输出相应的英语单词. 这道题有4种方法可以做: 1.map 2.字典树 3.快排+二分 4.hash表 参考博客:[解题报告]POJ_2503 字典树,MAP ...
- poj 2318 叉积+二分
TOYS Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13262 Accepted: 6412 Description ...
随机推荐
- FIDO 标准简介
FIDO 联盟(Fast IDentity Online Alliance)简介 网站:http://fidoalliance.org FIDO Alliance,成立于2012年7月. FIDO的目 ...
- hdu2457
AC自动机+DP #include <cstdio> #include <queue> #include <cstring> using namespace std ...
- 22. javacript高级程序设计-高级技巧
1. 高级技巧 1.1 函数 l 可以使用惰性载入函数,将任何分支推迟到第一个调用函数的时候 l 函数绑定可以让你创建始终在指定环境中运行的函数,同时函数柯里化可以让你创建已经填写了某些参数的函数 l ...
- percona-toolkit 之 【pt-deadlock-logger】说明
摘要: 死锁:是指两个或则多个事务在同一个资源上相互占用,并请求锁定对方占用的资源,而导致恶性循环的现象:当产生死锁的时候,MySQL会回滚一个小事务的SQL,确保另一个完成.上面是死锁的概念,而在M ...
- Python: 安装BeautifulSoup4
python3.4.3 安装BeautifulSoup4: 使用pip install 安装: 在命令行cmd之后输入,pip install BeautifulSoup4 BeautifulSoup ...
- Mathematics:Pseudoprime numbers(POJ 3641)
强伪素数 题目大意:利用费马定理找出强伪素数(就是本身是合数,但是满足费马定理的那些Carmichael Numbers) 很简单的一题,连费马小定理都不用要,不过就是要用暴力判断素数的方法先确定是 ...
- 关于定时器 setTimeout
1.这里不考虑线程问题.把javascript想象成在时间线上运行,页面载入时,首先执行的是<script>标签中的代码,之后,将执行更多代码,当进程空闲时,下个代码就被触发并执行 如图: ...
- 【leetcode】Restore IP Addresses (middle)
Given a string containing only digits, restore it by returning all possible valid IP address combina ...
- UVA 10815 Andy's First Dictionary ---set
题目链接 题意:输入一个文本,找出所有不同的单词(连续的字母序列),按字典序从小到大输出.单词不区分大小写. 刘汝佳算法竞赛入门经典(第二版)P112 #include <iostream> ...
- ios滑动手势全屏(这段代码实现了下一级控制器滑到上一级控制器)
在自定义导航控制器里面加以下代码就增加全屏滑动手势 >推向前一个控制器 // HBNavigationController.m // #import "HBNavigationCon ...