1425:sort
2015-09-25 18:41
211 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1425
方法:排序+hash
思路:很明显,由于需要排序的数据已经给出了上下限,而且并不是很大,可以再内存承受的范围内,所以可以考虑使用hash排序。
难点:题目本身不难,但是需要一些注意。首先,开数组的时候要开刀100万,这个数量大小在main函数中是开不出来的。要定义全局变量。其次,数组下标代表的是数据本身,数组下标是没有负数的,因此需要设置一个偏移量,把原来的-50万-50万映射为0-100万。这样就可以正常使用hash表了。
方法:排序+hash
思路:很明显,由于需要排序的数据已经给出了上下限,而且并不是很大,可以再内存承受的范围内,所以可以考虑使用hash排序。
难点:题目本身不难,但是需要一些注意。首先,开数组的时候要开刀100万,这个数量大小在main函数中是开不出来的。要定义全局变量。其次,数组下标代表的是数据本身,数组下标是没有负数的,因此需要设置一个偏移量,把原来的-50万-50万映射为0-100万。这样就可以正常使用hash表了。
#include <iostream> #include<cstdio> #include<cstring> using namespace std; const long int MAX = 1000000; const long int OFFSET = 500000; int hashset[MAX] = {0}; int main() { int n,m; while(~scanf("%d%d",&n,&m)) { memset(hashset,0,sizeof(hashset)); int num; while(n--) { scanf("%d",&num); hashset[num+OFFSET] = 1; } int counter = 1; for(int i = MAX;i >= 0 && counter <= m;i--) { if(hashset[i] == 1) { if(counter == m) printf("%d\n",i-OFFSET); else printf("%d ",i-OFFSET); counter++; } } } }
相关文章推荐
- 地球上的互联网大佬都来了,为啥缺了谷歌?
- CentOS 6.6 安装 HDFS 2.7.1
- 【Android】 从头搭建视频播放器(4)——屏幕旋转处理
- SVN cleanup失败
- ANT安装、环境变量配置及验证
- 快速入门系列--MVC--02路由
- BeanPropertyRowMapper
- HDU 1002 A + B Problem II
- 校招-中清龙图
- shell脚本基础进阶(四)----作业
- Python import机制 (十七)
- cf#317-B-Order Book-水题
- 你的毕业论文综述准备怎么写
- ggplot2学习笔记之构建图层
- hdu2262 Where is the canteen
- 4.1链表二叉树
- hdu2262 Where is the canteen
- 最小生成树--prim算法的c语言描述
- ThinkPHP--RBAC为角色分配权限成功之收集表单信息
- js实现图片上传预览