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. Linux command stty

    Linux command stty reference: https://blog.csdn.net/lqxandroid2012/article/details/78929506 [Purpose ...

  2. vue常见开发问题整理

    1.(webpack)vue-cli构建的项目如何设置每个页面的title 在路由里每个都添加一个meta [{ path:'/login', meta: { title: '登录页面' }, com ...

  3. JavaMail发送邮件、带附件邮件(完整版)

    工程目录如下: 1.准备javaMail需要的两个Jar包:mail.jar.activation.jar,然后add to build path 2.QQ邮箱开启SMTP服务,开启后,它会给你一串授 ...

  4. 数据库编程测试机试 QQ

    创建QQ数据库 #创建数据库 CREATE DATABASE QQ #创建表名 并且添加列 DROP TABLE IF EXISTS `dbo.BaseInfo`; CREATE TABLE `stu ...

  5. java中方法内可以调用同一个类中的方法

    在同一个类中,java的普通方法的相互调用,可以使用this+点号+方法名,也可省略this+点号,java编 译器会自动补上.

  6. 安装ubuntu gnome桌面

    注意: ubuntu 14.04.5默认的为unity桌面,有多点触发,没有自带Tweak Tool工具. 安装gnome桌面 sudo apt-get install ubuntu-gnome-de ...

  7. delete和delete[] 区别

    // DeleteAndDelete[].cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h> ...

  8. Redis部署与基本操作

    1.安装 1)不指定安装位置,则会把redis的可执行文件安装到  redis-2.8.6/src/目录下 [root@CentOS6 ~]# ls anaconda-ks.cfg  httpd-2. ...

  9. Problem D: 求(x-y+z)*2

    Description 编写一个程序,求解以下三个函数: f(x,y,z)=2*(x-y+z) f(x,y)  =2*(x-y) f(x)    =2*(x-1) 函数调用格式见append.cc. ...

  10. powerdesigner远程连接数据库

    1. dabatase-->configure connections 2.新建连接 3.配置TNS连接测试 4.出现异常及处理 Could not Initialize JavaVM! 出现这 ...