hash数组 POJ1840

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4
 5 using namespace std;
 6
 7 short has[25000010];
 8
 9 int main()
10 {
11     long long ans=0;
12     int a1,a2,a3,a4,a5;
13     while(scanf("%d%d%d%d%d",&a1,&a2,&a3,&a4,&a5)!=EOF)
14     {
15         memset(has,0,sizeof(has));
16         for(int i=-50;i<=50;i++)
17         {
18             if(i==0)
19                 continue;
20             for(int t=-50;t<=50;t++)
21             {
22                 if(t==0)
23                     continue;
24                 has[12500000+a1*i*i*i+a2*t*t*t]++;
25             }
26         }
27         for(int i=-50;i<=50;i++)
28         {
29             if(i==0)
30                 continue;
31             for(int j=-50;j<=50;j++)
32             {
33                 if(j==0)
34                     continue;
35                 for(int t=-50;t<=50;t++)
36                 {
37                     if(t==0)
38                         continue;
39                     if(12500000+a3*i*i*i+a4*j*j*j+a5*t*t*t>=0&&12500000+a3*i*i*i+a4*j*j*j+a5*t*t*t<=25000000)
40                         ans+=has[12500000+a3*i*i*i+a4*j*j*j+a5*t*t*t];
41                 }
42             }
43         }
44         cout<<ans<<endl;
45     }
46     return 0;
47 }

时间: 2024-10-05 03:31:46

hash数组 POJ1840的相关文章

刚刚上班才回来,今天和你说说hash数组

hash算法: 专门接受一个字符串,并计算出一个尽量不重复的编号.相同字符串,计算出的号一定相同!不同字符串,计算的号几乎不相同. 添加元素时: 将下标名称交给hash算法,计算出一个唯一的序号,将值保存到数组对应序号的元素中. 读取元素时: 将下标名称交给hash算法,计算出一个和存入时完全相同的序号,直接查找序号位置的元素值.不需要遍历! 特殊: 关联数组length属性失效(永远为0) 遍历: 依次获得arr中每个下标的名称,保存在变量key中 for(var key in arr){ a

JavaScript--数组--关联(hash)数组

关联(hash)数组的原理: hash算法: 接收一个字符串,计算出一个尽量不重复的序号 不同的字符串,计算出的序号尽量不同 相同的字符串,计算出的序号一定是相同 存入数据时: 将自定义下标名称交给hash算法,计算出一个尽量不重复的序号.将要保存的数据,存入序号对应的位置. 获取数据时: 将要查找的下标名称交给hash算法,再计算出和存入时一模一样的序号,直接去数组指定位置获取元素内容. 优点: 查找速度极快,与数据量和存储位置无关!

二维数组(扩展hash数组)以及json,严格模式,字符串的常用api

二维数组 数组中的每一个元素也是数组 ?var arr=[ [1,2,3], [4,5,6], [7,8,9], [1,2,3,4,5,6,7] ...]; 怎么遍历二维数组 var arr=[ [1,2,3], [4,5,6,7], [10,20,30,40,60,80] ]; for(var r=0;r<arr.length;r++){ for(var c=0;c<arr[r].length;c++){ console.log(arr[r][c]); } } 怎么访问二维数组中的元素 ar

POJ1840: Eqs(hash问题)

一道典型的hash问题: 已知a1,a2,a3,a4,a5,求有多少种不同的<x1,x2,x3,x4,x5>组合满足等式: a1*x1^3 + a2*x2^3 + a3*x3^3 + a4*x4^3 + a5*x5^3 = 0 一种做法是暴力枚举,但因为xi∈[-50,-1)(1,50],所以暴力枚举时间为O(100^5),显然不可行. 所以只能用hash方法: 我们可以讲前两项 a1*x1^3 + a2*x2^3 的所有可能多项式结果SUM运算出来,并将这些SUM映射到hash表上.因为可能

poj1840(Eps)

题目地址: Eps 题目大意; a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0   求有多少个解,范围是[-50,50].注意(x!=0). 解题思路: O(n^5)超时. 可以转换方程式  a1x13+ a2x23=-(a3x33+ a4x43+ a5x53) 时间复杂度降低到O(n^3). 同时也要注意MTL.由于计算左右两边的数相等,所以只需开2*(50*50*50*50)即可,又因为是从-50开始的,所以存在负数.须再数组乘以2 .利用简单的哈希先将左边的总和ha

hdu 5183 hash表

BC # 32 1002 题意:给出一个数组 a 和一个数 K ,问是否存在数对( i , j ),使 a i   - a i + 1 +……+ (-1)j - i  a j : 对于这道题,一开始就想到了是前缀和,但是如果只是记录下前缀和数组,那么查找就会成为一个大问题.补题的时候一开始考虑用 hash 数组或者是 set 存,但是很明显 TLE 了,在翔神的推荐下,我研究了一下 hash表的创建过程,惊奇地发现,其实就是建了一个 HashMap 结构体,而里面放了这个表所用的数组以及相应操作

js关联数组

标准javascript 是内含支持hash关联数组,经查找资料并测试,有关标准javascript内含的hash关联数组操作备忘如下 1.Hash关联数组定义 // 定义空数组 myhash = { } // 直接定义数组 myhash = {”key1″:”val1″, “key2″:”val2″ } // 用Array 定义数组 myhash = new Array(); myhash[”key1″] = “val1″; myhash[”key2″] = “val2″; 2.向Hash关联

题目1022:游船出租(hash简单应用)

问题来源 http://ac.jobdu.com/problem.php?pid=1022 问题描述 每次输入:船号(1~100) 键值(S或E) 发生时间(小时:分钟).当船号为0时,代表一天结束:当船号为-1时,结束输入. 问题分析 这道题一开始可能会想直接用一个结构体存下所有记录,在进行处理,这样一定是会超时的,为什么呢?由于我们在判断是不是多余数据时,需要遍历整个数组,浪费了大量时间,这种做法坑定是不行的. 本题我们发现船号只在1-100,很小的范围,那么我们使用hash数组,把船号当做

数组Array、数组API

1.数组:批量管理多个数据的存储空间. 数组的作用:现实中,批量管理多个数据都是集中分组存放,良好的数据结构,可极大提高程序的执行效率! 优点:方便查找 2.创建数组:(4种方式) (1)var 变量名=[]; 创建一个空数组 何时使用:暂时不知道数组中的元素内容时(2)var 变量名=[值1,值2,...]; -->创建数组同时,初始化数组中的数据(3)var 变量名=new Array(); 创建一个空数组 new:在window之外,创建一个新空间,保存多个数据 返回新空间的地址! 注意: