hdu1496—Equations(枚举)
来源:互联网 发布:第一会软件 编辑:程序博客网 时间:2024/06/11 01:42
题目链接:传送门
Equations
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 8411 Accepted Submission(s): 3468
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
解题思路:直接枚举100^4肯定会超时,令a*x1^2+b*x2^2 = -c*x3^2-d*x4^2
先算出左半部分的值打个表,然后算出右半部分的值有多少个和表中值相等,时间复杂度为100^2
注意该题的坑:打表的数组得开个两百万左右,所以初始化很耗时,memset比fill快
对于a,b,c,d同时大于0或小于0的情况直接判断,否则会超时,初始化得在这个判断后执行,否则用fill会超时,用memset勉强a过
哎,说多了都是泪!
#include <cstdio> #include <cstring> #include <cmath> #include <iostream> #include <queue>#include <set>#include <string>#include <stack>#include <algorithm>#include <map>using namespace std; typedef long long ll;const int N = 2000007;const int M = 1000001;const int INF = 0x3fffffff;const int mod = 1e9+7;const double Pi = acos(-1.0);const double sm = 1e-9;int rec[N];int main(){int a,b,c,d;while( ~scanf("%d%d%d%d",&a,&b,&c,&d) ){int tot = 0;//fill( rec , rec+N , 0 );if( (a > 0 && b > 0 && c > 0 && d > 0) || (a < 0 && b < 0 && c < 0 && d < 0) ){printf("0\n");continue;}memset( rec , 0 , sizeof(rec) );for( int x1 = 1 ; x1 <= 100 ; ++x1 ){for( int x2 = 1; x2 <= 100 ; ++x2 ){int p = a*x1*x1+b*x2*x2;rec[p+M] += 4;}}for( int x3 = 1 ; x3 <= 100 ; ++x3 ){for( int x4 = 1 ; x4 <= 100 ; ++x4 ){int p = -c*x3*x3-d*x4*x4;tot += rec[p+M]*4;}}printf("%d\n",tot);}return 0;}
阅读全文
0 0
- hdu1496—Equations(枚举)
- hdu1496 Equations(哈希表)
- HDU1496:Equations(二分)
- hdu1496 Equations(hash表)
- HDU1496--Equations
- HDU1496 Equations
- Equations hdu1496(hash)
- hdu1496 Equations Hash
- hdu1496 Equations (hash)
- hdu1496
- HDU1496
- HDU 4569 Special equations 枚举
- UVA - 10317 Equating Equations(普通的暴力枚举 dfs枚举 c(n,m))
- hdu1496(用hash思想统计数目)
- hdu1496 equation(较好的hash)
- Equations(数学,水)
- Equations(哈希)
- Equations(哈希)
- P1209 几何图形还原
- Android笔记五(Binder例子)
- Leetcode 151(Java)
- .Net实现邮件定时发送问题总结
- 【ubuntu】1404 安装ssh-server时出现错误
- hdu1496—Equations(枚举)
- 数据结构实验之栈七:出栈序列判定
- Win2008系统创建DNS服务器
- 蓝桥-ALGO-24-统计单词个数
- Java Swing2 基本登录框
- LeetCode 44. Wildcard Matching
- Java的类的加载器ClassLoader
- new和delete
- Linux性能监控工具