poj 1840 Eqs(Hash)
2015-07-17 21:45
417 查看
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
Sample Output
题意:
x1,x2,x3,x4,x5未知,求使方程式成立的情况有多少种。
思路:
看题目就知道数据有点大,如果5个for循环的话就是100^5,1ms处理1000条信息,绝对超时。转换一下方程式,即-(a1x13+
a2x23)=a3x33+
a4x43+ a5x53 。两个for循环,小于零标记并计数。在3层for循环,记录使等式成立的结果。
代码:
Time Limit: 5000MS | Memory Limit: 65536K | |
Total Submissions: 13829 | Accepted: 6787 |
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
题意:
x1,x2,x3,x4,x5未知,求使方程式成立的情况有多少种。
思路:
看题目就知道数据有点大,如果5个for循环的话就是100^5,1ms处理1000条信息,绝对超时。转换一下方程式,即-(a1x13+
a2x23)=a3x33+
a4x43+ a5x53 。两个for循环,小于零标记并计数。在3层for循环,记录使等式成立的结果。
代码:
#include<iostream> #include<cstring> using namespace std; short hash[25000001]; int main(void) { int a1,a2,a3,a4,a5; while(cin>>a1>>a2>>a3>>a4>>a5) { memset(hash,0,sizeof(hash)); for(int x1=-50;x1<=50;x1++) { if(!x1) continue; for(int x2=-50;x2<=50;x2++) { if(!x2) continue; int sum=(a1*x1*x1*x1 + a2*x2*x2*x2)*(-1); if(sum<0) sum+=25000000; hash[sum]++; } } int num=0; for(int x3=-50;x3<=50;x3++) { if(!x3) continue; for(int x4=-50;x4<=50;x4++) { if(!x4) continue; for(int x5=-50;x5<=50;x5++) { if(!x5) continue; int sum=a3*x3*x3*x3 + a4*x4*x4*x4 + a5*x5*x5*x5; if(sum<0) sum+=25000000; if(hash[sum]) num+=hash[sum]; } } } cout<<num<<endl; } return 0; }
相关文章推荐
- 一道树形dp的题目:个人赛第二场G题
- AndroidStudio插件GsonFormat快速实现JavaBean
- R12.2 克隆完成之后weblogic AdminSErver无法启动
- 设计模式之状态模式
- [POJ3982]序列[字符串][大整数]
- char与byte的区别
- Soldier and Bananas
- 使用Python的BeautifulSoup 类库采集网页内容
- 银行流水打印软件账单打印软件
- Ubuntu解决wifi无法连接的问题
- leetcode难度及面试频率
- 技术随笔八——仰望夜空 仰望Git
- 技术随笔八——仰望夜空 仰望Git
- 深入理解计算机系统读书笔记之第二章信息的表示和处理
- JSP路径出现故障
- JavaScript对象字面量
- c++primer之多维数组
- 关于dB,dBm的分析总结
- OpenStack Neutron理解
- android菜鸟学习笔记29----Android应用向用户发送提示信息的方式总结