hdu1496(hash)
来源:互联网 发布:域名紧急升级正在跳转 编辑:程序博客网 时间:2024/06/12 20:15
Equations
Equation
Time Limit: 6000/3000 MS (Java/Others)
Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5535 Accepted Submission(s): 2196
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1496
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解题思路: 题意就是满足公式的x1,x2,x3,x4有多少种。 暴力O(n^4)超时·····hash优化···直接降到了O(n^2)····· 可以建立两个数组,首先计算a * x1 ^ 2 + b * x2 ^ 2,正数存入hash1,负数存入hash2。然后计算c * x3 ^ 2 + d * x4 ^ 2,如果是正数则在hash2查找,负数在hash1查找。完整代码:#include <functional>#include <algorithm>#include <iostream>#include <fstream>#include <sstream>#include <iomanip>#include <numeric>#include <cstring>#include <climits>#include <cassert>#include <complex>#include <cstdio>#include <string>#include <vector>#include <bitset>#include <queue>#include <stack>#include <cmath>#include <ctime>#include <list>#include <set>#include <map>using namespace std;#pragma comment(linker, "/STACK:102400000,102400000")typedef long long LL;typedef double DB;typedef unsigned uint;typedef unsigned long long uLL;/** Constant List .. **/ //{const int MOD = int(1e9)+7;const int INF = 0x3f3f3f3f;const LL INFF = 0x3f3f3f3f3f3f3f3fLL;const DB EPS = 1e-9;const DB OO = 1e20;const DB PI = acos(-1.0); //M_PI;const int maxn = 1000001;int hash1[maxn];int hash2[maxn];int main(){ #ifdef DoubleQ freopen("in.txt","r",stdin); #endif int a , b , c , d; while(~scanf("%d%d%d%d" , &a , &b , &c , &d)) { int cnt = 0; if( (a > 0 && b > 0 && c > 0 && d > 0) || (a < 0 && b < 0 && c < 0 && d < 0) ) { printf("0\n"); continue; } memset(hash1 , 0 , sizeof(hash1)); memset(hash2 , 0 , sizeof(hash2)); for(int i = 1 ; i <= 100 ; i ++) { for(int j = 1 ; j <= 100 ; j ++) { int k = a * i * i + b * j * j; if(k >= 0) hash1[k] ++; else hash2[-k] ++; } } for(int i = 1 ; i <= 100 ; i ++) { for(int j = 1 ; j <= 100 ; j ++) { int k = c * i * i + d * j * j; if(k > 0) cnt += hash2[k]; else cnt += hash1[-k]; } } printf("%d\n",cnt * 16); }}
0 0
- HDU1496(hash)
- hdu1496 hash
- hdu1496(hash)
- Equations hdu1496(hash)
- hdu1496 Equations Hash
- hdu1496 Equations (hash)
- hdu1496 Equations(hash表)
- hdu1496(用hash思想统计数目)
- hdu1496 equation(较好的hash)
- hdu1496
- HDU1496
- HDU1496--Equations
- HDU1496 Equations
- 哈希--hdu1496
- hdu1496 Equations(哈希表)
- hdu1496 打表
- HDU1496:Equations(二分)
- hdu1496—Equations(枚举)
- 遥感影像显示相关的技术总结
- 鼠标滚轮及左右键切换图片
- 时序图的介绍
- java反射和内省
- 阿语和波斯语下Actionbar不从右往左设计
- hdu1496(hash)
- Javascript对象---对象名只是某个对象的引用,并不是副本
- C和指针 二
- HDU 4749 Parade Show(暴力水果)
- HDU 4572Bottles Arrangement 找规律
- Android手机扫描同一网段下的电视盒子的方法
- 二叉树最大宽度和高度(java)
- Openwrt:Makefile框架分析
- java-GUI小练习