zoukankan      html  css  js  c++  java
  • 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;
    }



  • 相关阅读:
    Hibernate 查询语句
    application 网站计数器
    Hibernate 配置
    常用正则表达式
    字符串的系列操作
    输入内容验证
    大小写字母验证
    验证非零的正整数
    验证数字输入
    Java面向对象之多态
  • 原文地址:https://www.cnblogs.com/misty1/p/2385872.html
Copyright © 2011-2022 走看看