poj1840

来源:互联网 发布:2017年网络大电影 编辑:程序博客网 时间:2024/05/19 10:14
#include<iostream>using namespace std;int cube[102];int a,b,c,d,e,ans,temp;const int MAX = 12500000;short arr[2*MAX+1];int main(){cin>>a>>b>>c>>d>>e;for(int i=-50;i<=50;i++){cube[i+50]=i*i*i;}memset(arr,0,sizeof(arr));for(int x1=-50;x1<=50;x1++){if(x1==0)continue;for(int x2=-50;x2<=50;x2++){if(x2==0)continue;arr[a*cube[x1+50]+b*cube[x2+50]+MAX]++;}}ans=0;for(int x3=-50;x3<=50;x3++){if(x3==0)continue;for(int x4=-50;x4<=50;x4++){if(x4==0)continue;for(int x5=-50;x5<=50;x5++){if(x5==0)continue;temp = c*cube[x3+50]+d*cube[x4+50]+e*cube[x5+50];if(temp>MAX||temp<-MAX)continue;ans+=arr[MAX-temp];}}}cout<<ans<<endl;return 0;}

将等式移项,把项数较少的一边结果hash。选择项数较少的可以使hash数组尽可能小,但是项数不能太少,因为另一边项数太多会TLE。