這題做的很搞笑..
真得總結總結..
把方程分成兩半,然后計算其中一半,存入hash.
如果枚舉另一半,然后與hash表對照..并累加..
可笑的我一開始用了兩個大數組來當hash..直接1對1映射累加..然后內存超了..
然后后來才想起來..只用一個hash..然后另一個來找就行了..
但是我用的大數組還是大了..
應該寫一個hash才好..
于是怒了..直接map扔上去..- -
#include <iostream>
#include <map>
using namespace std;

long long result=0;
map<int,int> m;
int main()


{
int a1,a2,a3,a4,a5;
cin>>a1>>a2>>a3>>a4>>a5;

for (int i=-50;i<=50;i++)
for (int j=-50;j<=50;j++)

{
if (i==0||j==0) continue;
int x=i*i*i*a4+j*j*j*a5;
map<int,int>::iterator iter=m.find(x);
if (iter==m.end())

{
m.insert(make_pair(x,1));
}
else

{
iter->second++;
}
}

for (int i=-50;i<=50;i++)
for (int j=-50;j<=50;j++)
for (int k=-50;k<=50;k++)

{
if (i==0||j==0||k==0) continue;
int x=i*i*i*a1+j*j*j*a2+k*k*k*a3;
map<int,int>::iterator iter=m.find(-x);
if (iter!=m.end())

{
result+=iter->second;
}
}
cout<<result<<endl;
system("pause");
return 0;
}
