hdu 1496 Equations
2012-02-28 16:30
399 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1496
题目意思也就是给你四个数a,b,c,d,让你求满足等式a*x1^2+b*x2^2+c*x3^2+d*x4^2=0;的个数。其中未知数的范围是[-100,100]; 常规的n^4肯定超时。这是使用了hash的算法。时间复杂度为n^2. 程序中的w[a*p[i]+b*p[j]+1000000]++;数组的下标表示状态,值表示个数。sum+=w[-(c*p[i]+d*p[j])+1000000];累计计算 其实可以这样理解前边两项的和为10数组+100的话是w[110]==1;要想满足要求 在后边的计数中应该为sum+=w[110] 而后两项的和c*x3^2+d*x4^2应为-10 所以就有了[-(c*p[i]+d*p[j])+1000000].
后边加上1000000是为了 把负值变成正的。
View Code
题目意思也就是给你四个数a,b,c,d,让你求满足等式a*x1^2+b*x2^2+c*x3^2+d*x4^2=0;的个数。其中未知数的范围是[-100,100]; 常规的n^4肯定超时。这是使用了hash的算法。时间复杂度为n^2. 程序中的w[a*p[i]+b*p[j]+1000000]++;数组的下标表示状态,值表示个数。sum+=w[-(c*p[i]+d*p[j])+1000000];累计计算 其实可以这样理解前边两项的和为10数组+100的话是w[110]==1;要想满足要求 在后边的计数中应该为sum+=w[110] 而后两项的和c*x3^2+d*x4^2应为-10 所以就有了[-(c*p[i]+d*p[j])+1000000].
后边加上1000000是为了 把负值变成正的。
View Code
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; const int MAX=50000; int w[MAX]; int f[MAX],g[MAX]; int p[102]; int hash(int k) { int t=k%MAX; if(t<0) t+=MAX; while(f[t]!=0&&g[t]!=k) t=(t+1)%MAX; return t; } int main() { int a,b,c,d,i,j,sum,tt,gg; for(i=1;i<=100;i++) p[i]=i*i; while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF) { if(a>0&&b>0&&c>0&&d>0||a<0&&b<0&&c<0&&d<0) { printf("0\n"); continue; } memset(w,0,sizeof(w)); memset(f,0,sizeof(f)); memset(g,0,sizeof(g)); for(i=1;i<=100;i++) for(j=1;j<=100;j++) { tt=a*p[i]+b*p[j]; gg=hash(tt); f[gg]++; g[gg]=tt; } sum=0; for(i=1;i<=100;i++) for(j=1;j<=100;j++) { tt=-(c*p[i]+d*p[j]); gg=hash(tt); sum+=f[gg]; } printf("%d\n",sum*16); } return 0; }
相关文章推荐
- hdu 1496 Equations(hash)
- Equations(hdu 1496 二分查找+各种剪枝)
- hdu 1496 Equations(hash+暴力)
- hdu 1496 Equations (双重循环+hash查找)
- HDU 1496 Equations
- HDU 1496 Equations hash HDU上排名第一!
- HDU 1496 Equations
- HDU 1496 Equations
- hdu 1496 Equations(数学:暴力|| HASH)
- HDU-1496-Equations && POJ-1840-Eqs (hash)
- HDU 1496 Equations
- HDU 1496 Equations(hash)
- hdu1496 Equations(hash表)
- HDU 1496 Equations(简单哈希)
- HDU 1496 Equations
- HDU 1496 Equations
- HDU 1496 Equations
- hdu_1496_equations( 二分 or hash )
- hdu 1496 -- Equations(哈希)
- hdu 1496 Equations (整数Hash)