Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 18816 Accepted Submission(s): 6416

Problem Description

还记得Gardon给小希布置的那个作业么?(上次比赛的1005)其实小希已经找回了原来的那张数表,现在她想确认一下她的答案是否正确,但是整个的答案是很庞大的表,小希只想让你把答案中最大的M个数告诉她就可以了。

给定一个包含N(N<=3000)个正整数的序列,每个数不超过5000,对它们两两相加得到的N*(N-1)/2个和,求出其中前M大的数(M<=1000)并按从大到小的顺序排列。

Input

输入可能包含多组数据,其中每组数据包括两行:

第一行两个数N和M,

第二行N个数,表示该序列。

Output

对于输入的每组数据,输出M个数,表示结果。输出应当按照从大到小的顺序排列。

Sample Input

4 4

1 2 3 4

4 5

5 3 6 4

Sample Output

7 6 5 5

11 10 9 9 8

在看堆排序 写了个裸的堆排序

TLE 代码

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int a[3005],b[3005*1508];
int n,m,t;
void down(int i) {
int x,flag=0;
while(i*2<=t&&flag==0) {
if(b[i*2]>b[i])
x=i*2;
else x=i;
if(i*2+1<=t) {
if(b[x]<b[i*2+1])
x=i*2+1;
}
if(x!=i) {
swap(b[x],b[i]);
i=x;
}
else flag=1;
} }
void creat() {
for(int i=t/2;i>=1;i--)
down(i);
}
void heapsort() {
while(t>1) {
swap(b[1],b[t]);
t--;
down(1);
}
}
int main() {
while(scanf("%d%d",&n,&m)!=EOF) {
t=0;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n-1;i++)
for(int j=i+1;j<=n;j++) {
b[++t]=a[i]+a[j];
}
creat();
heapsort();
for(int i=1;i<=m;i++) {
printf("%d",b[i]);
if(i!=m) printf(" ");
}
printf("\n");
}
return 0;
}

然后看着 找找模板 优化 优化 优化….

AC代码

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int a[3005],b[3005*1508];
int n,m,t;
void up(int i) {
int k=i/2;
if(i==1) return;
if(b[k]<b[i]) {
swap(b[i],b[k]);
up(k);
}
return;
}
void down(int i) {
int x,flag=0;
while(i*2<=t&&flag==0) {
if(b[i*2]>b[i])
x=i*2;
else x=i;
if(i*2+1<=t) {
if(b[x]<b[i*2+1])
x=i*2+1;
}
if(x!=i) {
swap(b[x],b[i]);
i=x;
}
else flag=1;
} }
int pop() {
int x=b[1];
swap(b[1],b[t--]);
down(1);
return x;
}
void ins(int i) {
b[++t]=i;
up(t);
}
int main() {
while(scanf("%d%d",&n,&m)!=EOF) {
t=0;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n-1;i++)
for(int j=i+1;j<=n;j++) {
ins(a[j]+a[i]);
}
for(int i=1;i<=m;i++) {
printf("%d",pop());
if(i!=m) printf(" ");
}
printf("\n");
}
return 0;
}

hdu 1280 堆排序的更多相关文章

  1. HDU 1280 前m大的数

    http://acm.hdu.edu.cn/showproblem.php?pid=1280 前m大的数 Time Limit: 2000/1000 MS (Java/Others) Memory L ...

  2. <hdu - 1280> 前M大的数 (注意其中的细节)

    这是杭电hdu上的链接http://acm.hdu.edu.cn/showproblem.php?pid=1280  Problem Description: 还记得Gardon给小希布置的那个作业么 ...

  3. HDU 1280 前m大的数 基数排序

    http://acm.hdu.edu.cn/showproblem.php?pid=1280 题目大意: 给你N(N<=3000)个数(这些数不超过5000),要求输出他们两两相加后和最大的M( ...

  4. HDU 1280 前m大的数【哈希入门】

    题意:中文的题目= =将各种组合可能得到的和作为下标,然后因为不同组合得到的和可能是一样的, 所以再用一个数组num[]数组,就可以将相同的和都记录下来 #include<iostream> ...

  5. hdu 1280 前m大的数 哈希

    前m大的数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  6. HDU 1280 前m大的数【排序 / hash】

    前m大的数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  7. HDU 1280 前m大的数(排序,字符串)

      前m大的数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  8. hdu 1280 前m大的数(排序)

    题意:排序 思路:排序 #include<iostream> #include<stdio.h> #include<algorithm> using namespa ...

  9. Hash算法入门指南(聊点不一样的算法人生)

    前言 很多人到现在为止都总是问我算法该怎么学啊,数据结构好难啊怎么的,学习难度被莫名的夸大了,其实不然.对于一个学计算机相关专业的人都知道,数据结构是大学的一门必修课,数据结构与算法是基础,却常常容易 ...

随机推荐

  1. JS--理解参数,argument,重载

    ECMAScript函数的参数与大多数其他语言函数的参数不同.ECMAScript函数不介意传递进来多少个参数,也不在乎传递进来的参数是什么数据类型. 原由在于,ECMAScript中的参数在内部是用 ...

  2. pycharm(Tip of Day)

    You can easily override the methos of the base class by press Ctrl + 0 ( code | override methods) Yo ...

  3. 普通程序员,三年成为年薪70w架构师,只因做到了这些

    每个程序员.或者说每个工作者都应该有自己的职业规划,如果你不是富二代,不是官二代,也没有职业规划,希望你可以思考一下自己的将来.今天给大家分享的是一篇来自阿里Java架构师对普通程序员的职业建议,希望 ...

  4. day06字典类型

    基本使用: 1.用途:用来存多个(不同种类的)值 2定义方式:在{}内用逗号分隔开多个key:value的元素,其中value可以是任意数据类型,而key的功能通常是用来描述value的,所以key通 ...

  5. RabbitMQ fanout类型的Exchange

    就目前来说,Exchange是与消息发送端有关的,因为它可以指定将消息发送到哪个或哪些队列中. 本篇文章介绍的fanout类型就是指定将消息群发到与Exchange绑定的所有队列中. fanout这个 ...

  6. C++标准异常概述

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  7. hdu-2063-过山车(匈牙利算法)

    过山车 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找 ...

  8. awk使用教程

    gawk - pattern scanning and processing language 基本用法:gawk [options] 'program' FILE ... program:PATTE ...

  9. Bootstrap--思维导图

    Bootstrap--思维导图

  10. HP Instant Information

    HP Instant Information before HP-UX 11i v3 <管理系统和工作组:HP-UX系统管理员指南> After HP-UX 11i v3 <HP-U ...