hdu acm 1425 sort(哈希表思想)

sort


Time
Limit: 6000/1000 MS (Java/Others)    Memory Limit:
65536/32768 K (Java/Others)
Total Submission(s):
25803    Accepted Submission(s):
7764

Problem Description

给你n个整数,请按从大到小的顺序输出其中前m大的数。

Input

每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。

Output

对每组测试数据按从大到小的顺序输出前m大的数。

Sample Input

5 3 3 -35 92 213
-644

Sample Output

213 92 3

Hint

Hint
请用VC/VC++提交

Author

LL

最简单的运用了哈希表的思想的题,开始看了好多关于散列的理论资料,太深奥反而抓不住基本思想。

基本做法


 1 #include <iostream>
2 #include <cstdio>
3 #include <algorithm>
4 using namespace std;
5
6 bool cmp(int x,int y)
7 {
8 return x>y;
9 }
10
11 int a[1000000];
12
13 int main()
14 {
15 int n,k;
16 while(~scanf("%d%d",&n,&k))
17 {
18 for(int i = 0;i<n;i++)
19 scanf("%d",&a[i]);
20 sort(a,a+n,cmp);
21 printf("%d",a[0]);
22 for(int i = 1;i<k;i++)
23 printf(" %d",a[i]);
24 printf("\n");
25 }
26
27 return 0;
28 }

哈希表思想(空间换时间)


 1 #include <iostream>
2 #include <cstring>
3 #include <stdio.h>
4 using namespace std;
5
6 int hash[1000010];
7 int main()
8 {
9 int i,n,m,t;
10 while(scanf("%d%d",&n,&m)!=EOF)
11 {
12 memset(hash,0,sizeof(hash));
13 for(i=0;i<n;i++)
14 {
15 scanf("%d",&t);
16 hash[t+500000]=1;
17 }
18 int flag=0;
19 for(i=1000010;i>0;i--)
20 {
21 if(hash[i])
22 {
23 printf("%d",i-500000);
24 m--;
25 if(m)
26 printf(" ");
27 }
28 if(m==0) break;
29 }
30 printf("\n");
31 }
32 return 0;
33 }

对比:


上为哈希表,下为普通做法。可看出差别很大

hdu acm 1425 sort(哈希表思想),码迷,mamicode.com

时间: 2024-10-15 00:19:54

hdu acm 1425 sort(哈希表思想)的相关文章

【转】HDU 1425 sort:哈希入门

#include<iostream> #include<cstring> #include<cstdio> using namespace std; const int Size = 1000000; int Hash[Size+1]; int main() { int n, m, num; while(cin>>n>>m) { memset(Hash, 0, sizeof(Hash)); for(int i=0; i<n; i++){ s

leetcode_438_Find All Anagrams in a String_哈希表_java实现

题目: Given a string s and a non-empty string p, find all the start indices of p's anagrams in s. Strings consists of lowercase English letters only and the length of both strings s and p will not be larger than 20,100. The order of output does not mat

sdut2605 A^X mod P 山东省第四届ACM省赛(打表,快速幂模思想,哈希)

本文出自:http://blog.csdn.net/svitter 题意: f(x) = K, x = 1 f(x) = (a*f(x-1) + b)%m , x > 1 求出( A^(f(1)) + A^(f(2)) + A^(f(3)) + ...... + A^(f(n)) ) modular P. 1 <= n <= 10^6 0 <= A, K, a, b <= 10^9 1 <= m, P <= 10^9 本题目的关键在于大幂的分解和..你要这样想,因

E题hdu 1425 sort

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1425 sort Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 33461    Accepted Submission(s): 9968 Problem Description 给你n个整数,请按从大到小的顺序输出其中前m大的数. Inpu

HDU 1425 sort 题解

选择出数列中前k个最大的数. 这里因为数据特殊,所以可以使用hash表的方法: #include <cstdio> #include <algorithm> #include <stdlib.h> #include <limits> using namespace std; const int SIZE = 1000005; const int SMALL = -500000; bool arr[SIZE]; int main() { int n, m, a

hdu 5183. Negative and Positive (哈希表)

Negative and Positive (NP) Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2177    Accepted Submission(s): 556 Problem Description When given an array (a0,a1,a2,?an−1) and an integer K, you are

HDU4887_Endless Punishment_BSGS+矩阵快速幂+哈希表

2014多校第一题,当时几百个人交没人过,我也暴力交了几发,果然不行. 比完了去学习了BSGS才懂! 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4887 Endless Punishment Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 52    Accepted Submissi

哈希表入门讲解

散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构.也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度.这个映射函数称做散列函数,存放记录的数组称做散列表. 一个通俗的例子是,为了查找电话簿中某人的号码,可以创建一个按照人名首字母顺序排列的表(即建立人名{\displaystyle x}到首字母{\displaystyle F(x)}的一个函数关系),在首字母为W的表中查找"王"姓的电话号

哈希函数和哈希表综述 (转)

哈希表及哈希函数研究综述 摘要 随着信息化水平的不断提高,数据已经取代计算成为了信息计算的中心,对存储的需求不断提高信息量呈现爆炸式增长趋势,存储已经成为急需提高的瓶颈.哈希表作为海量信息存储的有效方式,本文详细介绍了哈希表的设计.冲突解决方案以及动态哈希表.另外针对哈希函数在相似性匹配.图片检索.分布式缓存和密码学等领域的应用做了简短得介绍 哈希经过这么多年的发展,出现了大量高性能的哈希函数和哈希表.本文通过介绍各种不同的哈希函数的设计原理以及不同的哈希表实现,旨在帮助读者在实际应用中,根据问