您的位置:首页 > 其它

hdu 1496 Equations(哈希表)

2013-05-08 11:25 465 查看
昨天才看到这个题的加强版,今天就又遇见了。

这道题时间卡得很厉害,如果没有提前判断,对每一次输入都直接把mark数组赋值为0,会超时。

其实我没学过哈希表,也不知道那是什么东西。但是别人都说是哈希表,我也就跟着哈希表吧。

将一个四重循环分成两个二重循环。

#include<stdio.h>
#include<string.h>
#define N 1000000
int mark[2000005];
int main()
{
int i,j;
int a[105];
for(i=1;i<=100;i++)
a[i]=i*i;
int b[5];
while(scanf("%d%d%d%d",&b[0],&b[1],&b[2],&b[3])!=EOF)
{
if(b[0]<0&&b[1]<0&&b[2]<0&&b[3]<0||b[0]>0&&b[1]>0&&b[2]>0&&b[3]>0)
{
printf("0\n");
continue;
}
int temp;
memset(mark,0,sizeof(mark));
for(i=1;i<=100;i++)
{
for(j=1;j<=100;j++)
{
temp=b[0]*a[i]+b[1]*a[j];
mark[N+temp]++;
}
}
int ans=0;
for(i=1;i<=100;i++)
{
for(j=1;j<=100;j++)
{
temp=b[2]*a[i]+b[3]*a[j];
ans+=mark[N-temp];//后两个数的和和前两个数的和相加为0。
}
}
printf("%d\n",ans*16);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: