POJ 1840 Eqs
2016-04-27 18:40
309 查看
Language: Default Eqs
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 Romania OI 2002 |
#include <cstdio> #include <iostream> #include <string> #include <cstring> #include <list> #define MAXN 14997//一个较大的质数 using namespace std; list<int> h[MAXN*2+1]; list<int>::iterator it;//迭代器 int a,b,c,d,e,ans=0; int main() { cin>>a>>b>>c>>d>>e; for (int i=-50;i<=50;++i){ for (int j=-50;j<=50;++j){ if (i==0||j==0) continue; int x; x=d*i*i*i+e*j*j*j; h[x%MAXN+MAXN].push_back(x);//利用链表建立哈希表,+一个质数是为了处理负数的情况 } } for (int i=-50;i<=50;++i) for (int j=-50;j<=50;++j) for (int k=-50;k<=50;++k){ if (i==0||j==0||k==0) continue; int x; x=-a*i*i*i-b*j*j*j-c*k*k*k; for (it=h[x%MAXN+MAXN].begin();it!=h[x%MAXN+MAXN].end();++it) if (*it==x)ans++;//理想状态下仅有O(1)的复杂度 } cout<<ans<<endl; }
相关文章推荐
- 我的Android使用openCV记录(2)
- 监控 Linux 系统的 7 个命令行工具
- Node.js 简单的HelloWorld
- 线程sleep() 和 wait()简单比较
- 第一次冲刺(第九天)
- 十二生肖排序的真实原因
- akoj-1369 贪吃蛇
- httpclient basic认证
- HttpModule事件
- matlab 基础 —— 文本文件读取
- uva 10714 Ants
- HiveQL数据定义
- frescale imx6 gpioGPIO管理设计规范
- Java常见问题 -Dmaven.multiModuleProjectDirectory system propery is not set.
- ios-Alcatraz以及插件使用--
- 洛谷P1328 生活大爆炸版石头剪刀布——S.B.S.
- 第一冲刺阶段工作总结07
- textField限制输入长度
- android中如何去掉标题栏
- Java实现AOP面向切面编程的实例教程