题意:给定系数,求a1*x1^3+a2*x2^3+a3*x3^3+a4*x4^3+a5*x5^3 = 0方程式解的个数。 系数和x范围都是[-50, 50]但不包括0。
暴力解:上式转化为-(a1*x1^3+a2*x2^3) = a3*x3^3+a4*x4^3+a5*x5^3,
循环层数就变为3层,空间复杂度100^3,并且和为负数的时候加上25000000,
要建一个short cnt[25000001],用int空间不够;
#define INF 0x7fffffff
#define eps (1e-9)
#define clearto(s,x) memset(s,x,sizeof(s))
#define prime 999983
#define maxn 100010
using namespace std;
typedef long long llong;
int n,m,t,tot=0;
short cnt[25000001];
int cube[110];
int main()
{
//freopen("D:\data.txt","r",stdin);
int TT,i,j,k;
int a1,a2,a3,a4,a5;
for(i=-50;i<=50;i++) cube[i+50] =i*i*i;
while(~scanf("%d %d %d %d %d",&a1,&a2,&a3,&a4,&a5)){
clearto(cnt,0);
for(i=-50;i<=50;i++){
if(i==0) continue;
for(j=-50;j<=50;j++){
if(j==0) continue;
int sum = (-1)*(a1*cube[i+50]+a2*cube[j+50]);
if(sum<0) sum+= 25000000;
cnt[sum]++;
}
}
int sum,ans =0;
for(i=-50;i<=50;i++){
if(i==0) continue;
for(j=-50;j<=50;j++){
if(j==0) continue;
for(k=-50;k<=50;k++){
if(k==0) continue;
sum= a3*cube[i+50]+a4*cube[j+50]+a5*cube[k+50];
if(sum<0) sum+=25000000;
if(cnt[sum]) ans+=cnt[sum];
}
}
}
printf("%d\n",ans);
}
return 0;
}