a1+a2+a3+a4+a5=0;
转化成a1+a2=-(a3+a4+a5);
即先储存,后查找;
#include<iostream>
#include<vector>
#include <string>
#include<algorithm>
#include<fstream>
#include<cmath>
using namespace std;
#define lch(i) ((i)<<1)
#define rch(i) ((i)<<1|1)
#define sqr(i) ((i)*(i))
#define pii pair<int,int>
#define mp make_pair
#define FOR(i,b,e) for(int i=b;i<=e;i++)
#define FORE(i,b,e) for(int i=b;i>=e;i--)
#define ms(a) memset(a,0,sizeof(a))
const int maxnum =10007;
const int key = 177;
long long p[6][105];
int s[5];
int times;
struct NODE
{
long long val;
int time,next;
}node[10400];
int e=0;
int hashn[maxnum];
void init(){
FOR(i,0,maxnum-1) hashn[i]=-1;
}
int findsum(long long sum){
int nth =sum%maxnum;
nth = abs(nth);
for(int i=hashn[nth];i!=-1;i=node[i].next){
if(node[i].val==sum){
return node[i].time;
}
}
return 0;
}
void insert(long long sum){
int nth =abs((int)(sum%maxnum));
for(int i=hashn[nth];i!=-1;i=node[i].next){
if(node[i].val==sum){
node[i].time++;
return;
}
}
node[e].val=sum;
node[e].next = hashn[nth];
node[e].time=1;
hashn[nth]=e++;
}
int main()
{ /*
fstream fin("G:/1.txt");*/
ms(node);
FOR(i,0,4){
scanf("%d",&s[i]);/*
fin>>s[i];*/
FOR(j,-50,-1)
p[i+1][j+51]=s[i]*j*j*j;
FOR(j,1,50)
p[i+1][j+50]=s[i]*j*j*j;
}
init();
FOR(i,1,100){
FOR(j,1,100){
insert(0-(p[1][i]+p[2][j]));
}
}
times=0;
FOR(i,1,100)
FOR(j,1,100)
FOR(k,1,100)
times+=findsum(p[3][i]+p[4][j]+p[5][k]);
printf("%d\n",times);
return 0;
}