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. xubuntu无法进图形界面问题

    http://www.ubuntugeek.com/fix-for-cant-login-after-upgrading-from-ubuntu-13-04-to-ubuntu-13-10.html ...

  2. shell脚本学习之参数传递

    shell之参数传递 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 实例 以 ...

  3. jar包在控制台下运行

    今天有个项目需要在控制台下面运行jar文件 流程 1 新建java项目 2 新建 HelloWorld.java public class HelloWorld { public static voi ...

  4. 随机生成id

    function getRandom(){ return Math.random().toString(36).substring(7);}

  5. 写一个xml文件到磁盘的方法

    /** * 往磁盘上写一个xml文件 * * <?xml version="1.0" encoding="UTF-8" standalone=" ...

  6. Java 如何抛出异常、自定义异常

    Java错误与异常的基本概念: 1.java中异常均继承自Throwable,其有两个重要的直接子类error与exception. 2.java错误error,大部分是由虚拟机爆出来的错误,是程序无 ...

  7. 十四. Python基础(14)--递归

    十四. Python基础(14)--递归 1 ● 递归(recursion) 概念: recursive functions-functions that call themselves either ...

  8. gc图波峰波谷一直上升问题

    垃圾回收曲线,波峰和波谷一直上升.正常是波峰波谷在同一水平线上,可以想象如果程序继续运行下去,老年代内存回收后也不断上升,当达到老年代满了的时候,就会报内存溢出错误. 用jmap -histo pid ...

  9. java.lang.String 使用介绍

    这里我们将总结字符串相关的知识,除了总结String的API用法,同时我们还会总结一些相关的知识点,包括字符串常量池.StringBuffer.StringBuilder,以及equals和==的用法 ...

  10. countdownlatch 和 CyclicBarrier 和 Semaphore

    cdl用的是aqs,共享的是aqs那个volatile的state,阻塞线程列表用的也是aqs的 cb用的是reentrantlock+condition,当然rel用的也是aqs不过不同的是用的是互 ...