hash数组 POJ1840
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 5 using namespace std; 6 7 short has[25000010]; 8 9 int main() 10 { 11 long long ans=0; 12 int a1,a2,a3,a4,a5; 13 while(scanf("%d%d%d%d%d",&a1,&a2,&a3,&a4,&a5)!=EOF) 14 { 15 memset(has,0,sizeof(has)); 16 for(int i=-50;i<=50;i++) 17 { 18 if(i==0) 19 continue; 20 for(int t=-50;t<=50;t++) 21 { 22 if(t==0) 23 continue; 24 has[12500000+a1*i*i*i+a2*t*t*t]++; 25 } 26 } 27 for(int i=-50;i<=50;i++) 28 { 29 if(i==0) 30 continue; 31 for(int j=-50;j<=50;j++) 32 { 33 if(j==0) 34 continue; 35 for(int t=-50;t<=50;t++) 36 { 37 if(t==0) 38 continue; 39 if(12500000+a3*i*i*i+a4*j*j*j+a5*t*t*t>=0&&12500000+a3*i*i*i+a4*j*j*j+a5*t*t*t<=25000000) 40 ans+=has[12500000+a3*i*i*i+a4*j*j*j+a5*t*t*t]; 41 } 42 } 43 } 44 cout<<ans<<endl; 45 } 46 return 0; 47 }