http://acm.hdu.edu.cn/showproblem.php?pid=1425

题目大意:

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

其中n和m都是位于[-500000,500000]。

你说sort?嗯,速度太慢!

是的,水题。

sort可以直接过。但是时间不忍直视!500+MS

那么用hash做呗。因为数范围有限且唯一,直接开个bool的数组就好了。

值得一提的是我看别人的代码里面的输入,用自己写的函数,从300+MS到156MS ,当输入大的时候果然输入会成为瓶颈。

编程之美中也有类似这样的问题,使用维护极小堆来做的,维护元素个数为m个的堆,堆顶为最小的,当新的数大于堆顶就把原来堆顶替换掉,并且维护堆。

sort版本

#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN=1000000+10;
int a[MAXN];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
int i;
for(i=0;i<n;i++)
scanf("%d",&a[i]); sort(a,a+n);
int cnt=1;
for(i=n-1;cnt<m;cnt++,i--)
printf("%d ",a[i]);
printf("%d\n",a[i]); } return 0;
}

HASH+加速输入,HDU排名11.。。

#include<cstdio>
#include<cstring>
#define isdigit(c) ((c>='0' && c<='9'))
const int MAXN=(500000<<1)+10;
const int mod=500000;
bool a[MAXN];
inline void myscanf(int &num) //加速输入
{
char c=getchar();
while(!isdigit(c) && c!='-')
c=getchar(); bool neg=false;
if(c=='-')
{ neg=true; num=0; }
else
num=c-'0'; while(c=getchar() , isdigit(c) )
{
num*=10;
num+=c-'0';
}
if(neg==true)
num=-num; }
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
memset(a,0,sizeof(a));
int temp,i;
for(i=0;i<n;i++)
{
myscanf(temp);
a[temp + mod ] =1; } int cnt=1;
for(int i=mod<<1;i>=-mod && cnt <= m;i--)
{
if(a[i]!=0)
{
if(cnt==1)
printf("%d",i-mod);
else
printf(" %d",i-mod);
cnt++;
} }
printf("\n");
} return 0;
}

HDU 1425 sort hash+加速输入的更多相关文章

  1. E题hdu 1425 sort

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1425 sort Time Limit: 6000/1000 MS (Java/Others)    M ...

  2. hdu 1425 sort 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1425 常规的方法是对输入的数从大到小进行排序(可以用sort或qsort),然后输出前m大的数. 不过 ...

  3. HDU 1425 sort 【哈希入门】

    题意:给出n个数,输出前m大的数 和上一题一样,将输入的数加上一个极大地值作为地址 #include<iostream> #include<cstdio> #include&l ...

  4. hdu 1425:sort(排序,经典题。快排模板)

    sort Time Limit : 6000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submissi ...

  5. HDU 1425 sort(堆排序/快排/最大堆/最小堆)

    传送门 Description 给你n个整数,请按从大到小的顺序输出其中前m大的数. Input 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不 ...

  6. HDU 1425 sort 题解

    选择出数列中前k个最大的数. 这里由于数据特殊.所以能够使用hash表的方法: #include <cstdio> #include <algorithm> #include ...

  7. hdu 1425 sort

    Problem Description 给你n个整数,请按从大到小的顺序输出其中前m大的数.   Input 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行 ...

  8. HDU 1425 sort C语言实现快速排序

    AC代码:sort Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  9. hdu 1496 Equations hash表

    hdu 1496 Equations hash表 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1496 思路: hash表,将原来\(n^{4}\)降 ...

随机推荐

  1. kill&&pkill&&killall---删除执行中的程序

    命令功能: 发送指定的信号到相应进程.不指定型号将发送SIGTERM(15)终止指定进程.如果无法终止该程序可用“-KILL” 参数,其发送的信号为SIGKILL(9) ,将强制结束进程 使用ps命令 ...

  2. groupdel---删除指定的工作组

    groupdel命令 groupdel命令用于删除指定的工作组,本命令要修改的系统文件包括/ect/group和/ect/gshadow.若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组 ...

  3. pycharm不显示工具栏,自动导入模块,格式化代码快捷键

    我们需修改View里面的Toolbar,在前面打上沟,然后就可以显示了 自动导入模块设置:import numpy as np 我们需用鼠标选中numpy,然后在键盘上同时按住Alt+Enter键,通 ...

  4. 03008_使用JDBC对分类表进行增删改查操作

    1.创建数据库分类表 #创建数据库 create database mybase; #使用数据库 use dmybase; ###创建分类表 create table sort( sid int PR ...

  5. 平衡数之Treap

    #include <memory>//智能指针头文件 #include <random>//随机数头文件 #include <iostream> #include ...

  6. VPS 上线监控监控脚本

    文件地址 https://github.com/yourshell/yisuo-script/blob/master/vpstz/vpsmon.zip https://download.csdn.ne ...

  7. 有關AWS EC2 (EBS 收費)的問題

    有關AWS EC2 (EBS 收費)的問題 之前一陣子的時候,公司在使用Amazone Web Service (AWS)的 EC2 (Amazon Elastic Compute Cloud).不過 ...

  8. NET Framework 4.5 有更加简便的方法 Task.Run()

    NET Framework 4.5 有更加简便的方法 Task.Run()

  9. 前端项目中常用es6知识总结 -- Promise逃脱回调地狱

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const 2. ...

  10. Delphi部份函数,命令,属性中文说明

    Abort 函数 引起放弃的意外处理 Abs 函数 绝对值函数 AddExitProc 函数 将一过程添加到运行时库的结束过程表中 Addr 函数 返回指定对象的地址 AdjustLineBreaks ...