poj 1840 Eqs(hash表)

这题是用的stl中的map容器做的,刚开始想用暴力来着,看看了别人给的提示,无疑暴力一定会TL,所以改变策略,想通过hash表来做(本来这道题就是在hash的练习里,所以直接想到用hash了),可是无论你是先算前两个还是前三个,都没法确定数组要开多大,第一次先开了一个10w的数组,结果还是不行,因为题目中没给a1,a2,a3,a4,a5的范围,不好开数组。

搜了解题报告,看见有人用stl中map容器做的,又去学了下map容器的用法,http://hi.baidu.com/dizemmm/blog/item/29383e4eb564fa00b3de05d6.html

其实这题很简单,就是在开数组上有点犯难,可以看一下我的代码:

#include<stdio.h>
#include<map>
using namespace std;

map<int,int>Hash;
int s[105];

void init()
{
int i=0;
for(i=-50;i<=50;i++)s[i+50]=i*i*i;
}

int main()
{
int a[5];
int i,j,k,sum;

while(scanf("%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4])!=EOF)
{
init();
for(i=-50;i<=50;i++)
if(i)
{
for(j=-50;j<=50;j++)
{
if(j)
{
sum=a[0]*s[i+50]+a[1]*s[j+50];
if(Hash.end()==Hash.find(sum))Hash[sum]=1;
else Hash[sum]++;
}
}
}
int num=0;
for(i=-50;i<=50;i++)
if(i)
{
for(j=-50;j<=50;j++)
if(j)
{
for(k=-50;k<=50;k++)
if(k)
{
sum=a[2]*s[i+50]+a[3]*s[j+50]+a[4]*s[k+50];
if(Hash.end()!=Hash.find(0-sum)) num+=Hash[sum];
}
}
}
printf("%d\n",num);
}
return 0;
}



转载于:https://www.cnblogs.com/misty1/archive/2012/03/08/2385872.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值