您的位置:首页 > 其它

POJ 1840 Eqs

2012-11-21 09:56 531 查看
给出一个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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: