Equations(哈希)
来源:互联网 发布:海外出差 知乎 编辑:程序博客网 时间:2024/06/05 04:25
Link:http://acm.hdu.edu.cn/showproblem.php?pid=1496
Equations
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6091 Accepted Submission(s): 2467
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.
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.
End of file.
Output
For each test case, output a single line containing the number of the solutions.
Sample Input
1 2 3 -41 1 1 1
Sample Output
390880
AC code:
#include<iostream>#include<cmath>#include<climits>#include<cstring>#include<queue>#include<vector>#include<algorithm>#include<string.h>#include<cstdio>#define MAXN 1000010#define LL long longusing namespace std;int ha[MAXN*2];int sum;int main(){ int i,j,a,b,c,d; while(~scanf("%d%d%d%d",&a,&b,&c,&d)) { if((a<0&&b<0&&c<0&&d<0)||(a>0&&b>0&&c>0&&d>0)) { printf("0\n"); } else { memset(ha,0,sizeof(ha)); for(i=1; i<=100; i++) { for(j=1; j<=100; j++) { ha[a*i*i+b*j*j+1000000]++; } } sum=0; for(i=1; i<=100; i++) { for(j=1; j<=100; j++) { sum+=ha[-c*i*i-d*j*j+1000000]; } } LL ans=sum*2*2*2*2; printf("%I64d\n",ans); } } return 0;}
空间优化哈希算法:
AC code:
#include<iostream>#include<cmath>#include<climits>#include<cstring>#include<queue>#include<vector>#include<algorithm>#include<string.h>#include<cstdio>#define MAXN 20010#define LL long longusing namespace std;int f[MAXN],g[MAXN];LL ans;int has(int k){ int t=k%MAXN; if(t<0) { t+=MAXN; } while(f[t]!=0&&g[t]!=k) { t=(t+1)%MAXN; } return t;}int main(){ int a,b,c,d,i,j,s,p; while(scanf("%d%d%d%d",&a,&b,&c,&d)>0) { if(a>0&&b>0&&c>0&&d>0||a<0&&b<0&&c<0&&d<0) { printf("0\n"); continue; } memset(f,0,sizeof(f)); for(i=1; i<=100; i++) { for(j=1; j<=100; j++) { s=a*i*i+b*j*j; p=has(s); f[p]++; g[p]=s; } } ans=0; for(i=1; i<=100; i++) { for(j=1; j<=100; j++) { s=-c*i*i-d*j*j; p=has(s); ans+=f[p]; } } printf("%I64d\n",ans*16); } return 0;}
0 0
- Equations(哈希)
- Equations(哈希)
- hdu 1496 -- Equations(哈希)
- HDU 1496 Equations 哈希
- Equations(数学,水)
- hdu1496 Equations(哈希表)
- HDU1496:Equations(二分)
- (zoj1204)Additive equations
- Equations(Hash)
- Equations
- Equations
- Equations
- hdu 1496 Equations(哈希表)
- hdu 1496 Equations (hash)
- hdu1496 Equations(hash表)
- HDU 1496 Equations(hash)
- (hash)hdu 1496 Equations
- Special equations(数学筛)
- 1087Super Jumping! Jumping! Jumping!
- 常见排序算法总结(java版)
- spark:学习杂记--39
- 欢迎使用CSDN-markdown编辑器
- ssao
- Equations(哈希)
- 一起talk Vim吧(第五回:Vim无影刀法)
- leetCode #203 remove linked list elements
- 【数据结构】回顾栈ADT和队ADT
- 黑马程序员_Java语言_反射及jdk新特性
- WebService到底是什么?
- Liner Regression(Gradient descent algorithm)
- Linux IO漫谈
- Thinking in Java -- Introduction to Object