HDU 1425 sort hash+加速输入
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+加速输入的更多相关文章
- E题hdu 1425 sort
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1425 sort Time Limit: 6000/1000 MS (Java/Others) M ...
- hdu 1425 sort 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1425 常规的方法是对输入的数从大到小进行排序(可以用sort或qsort),然后输出前m大的数. 不过 ...
- HDU 1425 sort 【哈希入门】
题意:给出n个数,输出前m大的数 和上一题一样,将输入的数加上一个极大地值作为地址 #include<iostream> #include<cstdio> #include&l ...
- hdu 1425:sort(排序,经典题。快排模板)
sort Time Limit : 6000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submissi ...
- HDU 1425 sort(堆排序/快排/最大堆/最小堆)
传送门 Description 给你n个整数,请按从大到小的顺序输出其中前m大的数. Input 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不 ...
- HDU 1425 sort 题解
选择出数列中前k个最大的数. 这里由于数据特殊.所以能够使用hash表的方法: #include <cstdio> #include <algorithm> #include ...
- hdu 1425 sort
Problem Description 给你n个整数,请按从大到小的顺序输出其中前m大的数. Input 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行 ...
- HDU 1425 sort C语言实现快速排序
AC代码:sort Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- hdu 1496 Equations hash表
hdu 1496 Equations hash表 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1496 思路: hash表,将原来\(n^{4}\)降 ...
随机推荐
- learn ES6
介绍 ES6,也叫ECMAScript2015(以下统称ES6),是ECMAScript标准的最新版本.这个标准在2015年6月份被正式批准.ES6是js语言很有意义的一次更新,也是2009年ES5被 ...
- 今日题解------codeforce 893d
题意:给你一个数列,小于零表示表示信用卡里取出钱,大于零表示信用卡里存钱,等于零表示要查询信用卡, 如果被查到信用卡里的钱小于零,那你就GG,或者在任何时候你的信用卡里的钱大于d的话(不需要找ai等于 ...
- 重构insert update 比较两个datatbale
#region 下载时重构insert(数据带null处理) public void DownDataInsert(DataTable _dt, string TableName,DBHelper d ...
- C#解析HTML源码
刚做了一个小任务,需要抓取其他网站的部分数据,这里就顺便介绍使用Winista.Text.HtmlParser这个类库如何解析HTML并抓取部分数据 1.获取指定网站的页面源码 string url ...
- 用Bandwidth Controller实现局域网带宽控制
用Bandwidth Controller实现局域网带宽控制 很多做网络管理的朋友都知晓微软的ISA Serve防火墙,在ISA Server 2000中,带宽管理功能是通过设置优先级来实现,但是管理 ...
- XML Pull
java [android]xml new parse tool XML parsing with XML Pull import org.xmlpull.v1.XmlPullParser;
- CISP/CISA 每日一题 五
CISA 每日一题(答) 信息系统审计师要确认系统变更程序中的: 1.变更需求应有授权.优先排序及跟踪机制: 2.日常工作手册中,明确指出紧急变更程序: 3.变更控制程序应同时为用户及项目开发组认可: ...
- Redmine安装
http://www.itnpc.com/news/web/146433249372595.html http://www.cnblogs.com/iluzhiyong/p/redmine.html ...
- js检查元素是否包括在数组中
说明 在系统中须要检查税率填写的正确性,一定是国家规定的某几种税率,当然能够通过if else进行校验,可是还能够使用定义一个数组然后校验是否包括在元素中进行校验. 长处:加入税率无需改动逻辑,仅仅须 ...
- ubuntu-系统密匙
1.安装虚拟机xp,需要密匙,网上搜了一个,验证能用 MRX3F-47B9T-2487J-KWKMF-RPWBY 2.安装vm也需要密匙,如下可用 HC6JC-FPJ4M-RZM61-48852-2A ...