您的位置:首页 > 其它

POJ 1840 (hash)

2012-03-12 22:06 281 查看
Eqs

Time Limit: 5000MSMemory Limit: 65536K
Total Submissions: 7551Accepted: 3698
Description

Consider equations having the following form:

a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0

The coefficients are given integers from the interval [-50,50].

It is consider a solution a system (x1, x2, x3, x4, x5) that verifies the equation, xi∈[-50,50], xi != 0, any i∈{1,2,3,4,5}.

Determine how many solutions satisfy the given equation.

Input

The only line of input contains the 5 coefficients a1, a2, a3, a4, a5, separated by blanks.

Output

The output will contain on the first line the number of the solutions for the given equation.

这个题。。。我承认我弱爆了。。。。
a[1]*num[i]+a[2]*num[j]+a[3]*num[k] = a[4]*num[i]+a[5]*num[j]

HASH我都没开。。。。直接开了2600W short int,没想到竟然就AC了
#include<stdio.h>
#include<string.h>

#define maxn 13000000
#define maxn2 26000000
#define f(i) (i + maxn)

short sum[maxn2] = {0};
int num[101] = {0},a[6] = {0};

void init()
{
int i,j;
for(i = 1;i <= 5;i++)
scanf("%d",&a[i]);
for(i = 1;i <= 50;i++) {
num[i] = i*i*i;
num[i+50] = -num[i];
}
}

void work()
{
int i,j,k,ans = 0;
for(i = 1;i <= 100;i++)
for(j = 1;j <= 100;j++)
for(k = 1;k <= 100;k++)
if (f(a[1]*num[i]+a[2]*num[j]+a[3]*num[k]) > 0 && f(a[1]*num[i]+a[2]*num[j]+a[3]*num[k]) < maxn2)
sum[f(a[1]*num[i]+a[2]*num[j]+a[3]*num[k])]++;
for(i = 1;i <= 100;i++)
for(j = 1;j <= 100;j++)
ans += sum[f(a[4]*num[i]+a[5]*num[j])];
printf("%d\n",ans);
}

int main()
{
init();
work();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: