hdu 1496 整数hash
2014-09-06 22:28
239 查看
这样的思想确实可以开阔视野
#include<iostream> #include<cstdio> #include<queue> #include<stack> #include<algorithm> #include<cstring> #include<cstdlib> using namespace std; const int LEN=2000006; const int OFFSET=1000000; const int RANGE=101; int hash[LEN]; int main() { int a, b, c, d, ans, i, j; 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; } for(i=1; i<RANGE; i++) for(j=1; j<RANGE; j++) hash[a*i*i+b*j*j+OFFSET]++; ans=0; for(i=1; i<RANGE; i++) for(j=1; j<RANGE; j++) ans+=hash[-c*i*i-d*j*j+OFFSET]; for(i=1; i<RANGE; i++) for(j=1; j<RANGE; j++) hash[a*i*i+b*j*j+OFFSET]--; printf("%d\n", ans*16); } return 0; } // by laili #include<stdio.h> #include<memory.h> #define MAX 50021 int f[MAX],g[MAX]; 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,p,i,j,s,n,t[101]; for(i=1;i<=100;i++) t[i]=i*i; 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)); n=0; for(i=1;i<=100;i++) for(j=1;j<=100;j++) { s=a*t[i]+b*t[j]; p=hash(s); g[p]=s; f[p]++; } for(i=1;i<=100;i++) for(j=1;j<=100;j++) { s=-(c*t[i]+d*t[j]); p=hash(s); n+=f[p]; } printf("%d\n",n*16); } }
相关文章推荐
- hdu 题目1496 Equations , POJ 题目1840 Eqs (整数Hash)
- hdu 1496 Equations (整数Hash)
- HDU 1496 Equations(大整数的hash)
- HDU 1496 Equations 【整数Hash】
- hdu 1496(hash)
- hdu 1496 Equations hash 暴力+hash
- hdu 1496 Equations(hash)@
- hdu 1496(hash经典)
- hdu 1496 hash 方程解的情况
- hdu 1496 Equations(hash)
- HDU1496 hash
- hdu-1496(hash)
- hdu1496 hash
- hdu 1496 Equations (hash)
- HDU-1496-Equations && POJ-1840-Eqs (hash)
- (hash) hdu 1496
- hdu_1496_equations( 二分 or hash )
- HDU 4334 Trouble 和 HDU 1496 Equations( hash)
- hdu 1496 hash+暴力
- hdu 1496 hash