poj 1840 简单hash。
poj 1840 简单hash。
与其说是hash,我倒觉得这只是函数映射的思想而已。
//return a[0]*pow(double(x1),double(3))+a[1]*pow(double(x2),double(3))+a[2]*pow(double(x3),double(3)); return a[0]*x1*x1*x1+a[1]*x2*x2*x2+a[2]*x3*x3*x3;对于这行。。之前用的是注释掉的那行的时候。。Time:4000+MS,一改就降了一个数量级。。。。。。。。
Source Code
| Problem: 1840 | User: 64162451 | |
| Memory: 53824K | Time: 469MS | |
| Language: C++ | Result: Accepted |
- Source Code
#include<iostream> #include<fstream> #include<map> #include<math.h> using namespace std; const int prime=39999991; const int Max=18750000; map<int,int> map1; short int Hash[prime]; int a[5]; int f(int x1,int x2,int x3) { //return a[0]*pow(double(x1),double(3))+a[1]*pow(double(x2),double(3))+a[2]*pow(double(x3),double(3)); return a[0]*x1*x1*x1+a[1]*x2*x2*x2+a[2]*x3*x3*x3; } int g(int x4,int x5) { //return -(a[3]*pow(double(x4),double(3))+a[4]*pow(double(x5),double(3))); return a[3]*x4*x4*x4+a[4]*x5*x5*x5; } int main() { //fstream cin("C:\\Users\\wuyanyisb\\Desktop\\1.txt"); for(int i=0;i<5;i++) cin>>a[i]; for(int i=-50;i<=50;i++) { if(i==0)continue; for(int j=-50;j<=50;j++) { if(j==0)continue; int t=g(i,j); Hash[t+Max]++; } } int ans=0; for(int i=-50;i<=50;i++) { if(i==0)continue; for(int j=-50;j<=50;j++) { if(j==0)continue; for(int k=-50;k<=50;k++) { if(k==0)continue; ans+=Hash[f(i,j,k)+Max]; } } } cout<<ans<<endl; system("pause"); return 0; }
浙公网安备 33010602011771号