hdu 1280 堆排序
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 堆排序的更多相关文章
- HDU 1280 前m大的数
http://acm.hdu.edu.cn/showproblem.php?pid=1280 前m大的数 Time Limit: 2000/1000 MS (Java/Others) Memory L ...
- <hdu - 1280> 前M大的数 (注意其中的细节)
这是杭电hdu上的链接http://acm.hdu.edu.cn/showproblem.php?pid=1280 Problem Description: 还记得Gardon给小希布置的那个作业么 ...
- HDU 1280 前m大的数 基数排序
http://acm.hdu.edu.cn/showproblem.php?pid=1280 题目大意: 给你N(N<=3000)个数(这些数不超过5000),要求输出他们两两相加后和最大的M( ...
- HDU 1280 前m大的数【哈希入门】
题意:中文的题目= =将各种组合可能得到的和作为下标,然后因为不同组合得到的和可能是一样的, 所以再用一个数组num[]数组,就可以将相同的和都记录下来 #include<iostream> ...
- hdu 1280 前m大的数 哈希
前m大的数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- HDU 1280 前m大的数【排序 / hash】
前m大的数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- HDU 1280 前m大的数(排序,字符串)
前m大的数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- hdu 1280 前m大的数(排序)
题意:排序 思路:排序 #include<iostream> #include<stdio.h> #include<algorithm> using namespa ...
- Hash算法入门指南(聊点不一样的算法人生)
前言 很多人到现在为止都总是问我算法该怎么学啊,数据结构好难啊怎么的,学习难度被莫名的夸大了,其实不然.对于一个学计算机相关专业的人都知道,数据结构是大学的一门必修课,数据结构与算法是基础,却常常容易 ...
随机推荐
- css3 min-content,max-content,fit-content, fill属性
css3里有四个属性,用来实现以内容为主的尺寸计算方式,intrinsic sizing min-content max-content fit-content fill 其中 fill 关键字,需要 ...
- js的event.preventDefault()与event.stopPropagation()
event.preventDefault()用法介绍 该方法将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作).例如,如果 type 属性是 "submit" ...
- Linux命令----su(切换用户)以及passwd(修改用户密码)
一.su命令登录root 用户在使用telnet命令可以远程登录,但不可以登录root,这样就需要使用su命令来登录root用户. telnet登录(不能登录root)--- 1.启动终端 输入 te ...
- 深入理解java虚拟机---虚拟机工具jps与jstat(十四)
jps-java process status jps类似于linux的ps命令,用于查看进程. JPS 名称: jps - Java Virtual Machine Process Status T ...
- Eclipse几点常用设置+个人喜好
1.代码自动提示 在我们忘记方法名或者想偷懒时,代码自动提示很管用.不过Eclipse默认是输入"."后才会出现包或类成员的提示,也就意味着我们必须先输入一个完整的类名,提示才能出 ...
- BeanUtils出现Java.lang.NoClassDefFoundError解决
问题描述: javaWeb项目中导入了BeanUtils的两个包,但是还是出现Java.lang.NoClassDefFoundError: org/apache/commons/beanutils/ ...
- 手打struts知识点
Struts2概论 1.MVC原理 MVC(Model-View-Controller),程序设计理念 视图不用多说,html.jsp等 控制器,中转站,分配各个组件应当做什么,接受参数并跳转其他处理 ...
- 在 子 iframe中 点击一个按钮, 变换 这个 iframe的地址url.
//跳到测试结果: function jump() { console.log(self.parent.document.getElementById("iframe").src) ...
- centos6.6安装hadoop-2.5.0(六、各种node功能)
一.hadoop的YARN框架 hadoop的YARN职能就是将资源调度和任务调度分开 ResourceManager全局管理所有应用程序计算资源的分配,每一个job的ApplicationMaste ...
- logging日志模块,hashlib hash算法相关的库,
logging: 功能完善的日志模块 import logging #日志的级别 logging.debug("这是个调试信息")#级别10 #常规信息 logging.info( ...