POJ 1840 Eqs

给出一个5元3次方程,输入其5个系数,求它的解的个数

把方程变个形,然后左右对拍。

注意,map需要记录值出现的次数,因为若x1 =a, x2=b ,x3=c ,x4=d,x5=e时,与 x1=b, x2=a ,x3=c ,x4 =d, x5=e 代入方程后都得到值0,那么他们视为不同的解。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
using namespace std;
map<long long,int> mp;
int main()
{
    long long i,j,k,l,o,cnt;
    long long c[5];
    long long tll;
    for (i=0; i<5; i++)
    {
        scanf("%lld",c+i);
    }
    cnt=0;
    mp.clear();
    for (i=-50; i<=50; i++)
    {
        if (i == 0)
            continue;
        for (j=-50; j<=50; j++)
        {
            if (j == 0)
                continue;
            tll=i*i*i*c[0]+j*j*j*c[1];
            tll=-tll;
            if (mp.find(tll) != mp.end())
            {
                mp[tll]++;
            }
            else
                mp[tll]=1;
        }
    }
    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;
                tll=i*i*i*c[2]+j*j*j*c[3]+k*k*k*c[4];
                if (mp.find(tll) != mp.end())
                    cnt+=mp[tll];
            }
        }
    }
    printf("%lld\n",cnt);
}


你可能感兴趣的:(POJ 1840 Eqs)