对a1x1^3+a2x2^3+a3x3^3的结果哈希, 然后暴力枚举x4, x5, 在哈希表中二分查找即可
/*author: birdstorm*/
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#define MAXN 1005
#define N 205
#define INF 1<<30
#define eps 1.0e-10
#define For(i,m,n) for(i=(m);i<n;i++)
using namespace std;
vector<int> hash;
int main()
{
int i, j, k, sum, ans=0, cnt=0;
int a, b, c, d, e;
scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
For(i,-50,51){
if(i==0) continue;
For(j,-50,51){
if(j==0) continue;
For(k,-50,51){
if(k==0) continue;
sum=i*i*i*a+j*j*j*b+k*k*k*c;
hash.push_back(sum);
}
}
}
sort(hash.begin(),hash.end());
For(i,-50,51){
if(i==0) continue;
For(j,-50,51){
if(j==0) continue;
sum=-i*i*i*d-j*j*j*e;
if(binary_search(hash.begin(),hash.end(),sum)) ans+=upper_bound(hash.begin(),hash.end(),sum)-lower_bound(hash.begin(),hash.end(),sum);
}
}
printf("%d\n",ans);
return 0;
}