hdu 1496 Equations
2015-06-24 21:00
330 查看
Equations
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6262 Accepted Submission(s): 2536
Problem Description
Consider equations having the following form:
a*x1^2+b*x2^2+c*x3^2+d*x4^2=0
a, b, c, d are integers from the interval [-50,50] and any of them cannot be 0.
It is consider a solution a system ( x1,x2,x3,x4 ) that verifies the equation, xi is an integer from [-100,100] and xi != 0, any i ∈{1,2,3,4}.
Determine how many solutions satisfy the given equation.
Input
The input consists of several test cases. Each test case consists of a single line containing the 4 coefficients a, b, c, d, separated by one or more blanks.
End of file.
Output
For each test case, output a single line containing the number of the solutions.
Sample Input
1 2 3 -4 1 1 1 1这题是要用hash法,第一次学hash, 参考了大神代码, 2014,6,24#include<stdio.h> #include<string.h> int x[1000005];//保存得数是正的 int y[1000005];//保存得数是负的 int main(){ int i,j,k,l,count,a,b,c,d; while(~scanf("%d%d%d%d",&a,&b,&c,&d)){ count=0; if((a>0&&b>0&&c>0&&d>0)||(a<0&&b<0&&c<0&&d<0)){ printf("0\n"); continue; } memset(x,0,sizeof(x)); memset(y,0,sizeof(y)); for(i=1;i<=100;i++) for(j=1;j<=100;j++){ k=a*i*i+b*j*j; if(k>=0) x[k]++;//这里k要>=0 else y[-k]++; } for(i=1;i<=100;i++) for(j=1;j<=100;j++){ k=c*i*i+d*j*j; if(k>0) count+=y[k];//若k为正,加上的f2[k] ,这里k要>0,不能>=0 else count+=x[-k];//若k为负,加上的f1[k] } printf("%d\n",count*16);//每个解有正有负,结果有2^4种 } return 0; }
Sample Output
39088 0
相关文章推荐
- socket编程过程
- CSS实现进度条和订单进度条
- LeetCode 94. Binary Tree Inorder Traversal
- java读取指定package下的所有class
- 3-38
- android应用锁可以做的一些事
- C# 6 —— 属性
- docker nsenter
- LeetCode 116. Populating Next Right Pointers in Each Node
- Bootstrap系列 -- 15. 下拉选择框select
- IE11下请求JSON下载文件
- 黑马程序员--java面向对象之this的作用总结
- cookie安全
- 实战Spark分布式SQL引擎
- 关于 setCharacterEncoding setContentType
- LeetCode 144. Binary Tree Preorder Traversal
- jquery html 在某些时候不如 直接 innerHtml
- Bootstrap系列 -- 14. 表单控件输入框input
- poj 1611 求0号结点所在集合的元素个数
- 快速排序