题意:给定系数,求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; }