大致题意:
给出一个5元3次方程,输入其5个系数,求它的解的个数
其中系数 ai∈[-50,50] 自变量xi∈[-50,0)∪(0,50]
水题,不过有点技巧
这样时间复杂度就从n^5变为n^2+n^3了
用short int hash存储左边出现数字的次数,下标为左边的值,允许多对一,所以右边的值如果在左边出现,则count+=hash[sum]
左边范围是-12500000——12500000,加上25000000,变为0——25000000
#include <iostream>
using namespace std;
#include <cstdlib>
#include <cstdio>
#include <string.h>
short int hash[25001111]={0};
int main()
{
int sum;
int count=0;
int a,b,c,d,e;
cin>>a>>b>>c>>d>>e;
for(int i=-50;i<=50;i++)
{
for(int j=-50;j<=50;j++)
{
if(i!=0&&j!=0)
{
sum=0-a*i*i*i-b*j*j*j+12500000;
hash[sum]++;
}
}
}
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)
{
sum=c*i*i*i+d*j*j*j+e*k*k*k+12500000;
if(sum>=0&&sum<=25001111)
{
if(hash[sum]>0)
count+=hash[sum];
}
}
}
}
}
printf("%d\n",count);
}