【hdu1280】前M大的数
前m大的数
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 19208 Accepted Submission(s):
6563
给定一个包含N(N<=3000)个正整数的序列,每个数不超过5000,对它们两两相加得到的N*(N-1)/2个和,求出其中前M大的数(M<=1000)并按从大到小的顺序排列。
第一行两个数N和M,
第二行N个数,表示该序列。
1 2 3 4
4 5
5 3 6 4
11 10 9 9 8
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<stack>
#include<vector>
#include<algorithm>
//#include<cmath> using namespace std;
const int INF = 9999999;
#define LL long long inline int read(){
int x=0,f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) x=x*10+c-'0';
return x*f;
}
int N,M;
int a[100001];
int heap[100001];
int len; void insert(int x){
heap[++len]=x;
for(int k=len;k!=1;k/=2){
if(heap[k]<heap[k/2]) swap(heap[k],heap[k/2]);
else break;
}
return ;
}
void delet(){
if(len==0) return ;
heap[1]=heap[len];len--;
for(int k=1;k*2<=len;){
if((k*2<=len)&&(k*2+1>len)){
if(heap[k*2]<heap[k]) swap(heap[k*2],heap[k]),k*=2;
else break;
}
else{
if(heap[k*2]<heap[k]||heap[k*2+1]<heap[k]){
if(heap[k*2]<heap[k*2+1]) swap(heap[k],heap[k*2]),k*=2;
else swap(heap[k],heap[k*2+1]),k*=2,k++;
}
else break;
}
}
return ;
}
int ans[100001];
int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
while(scanf("%d%d",&N,&M)!=EOF){
len=0;
for(int i=1;i<=N;i++) a[i]=read();
for(int i=1;i<=N;i++)
for(int j=i+1;j<=N;j++){
insert(a[i]+a[j]);
if(len>M) delet();
}
for(int i=1;i<=M;i++) ans[i]=heap[1],delet();
for(int i=M;i>1;i--) printf("%d ",ans[i]);
printf("%d\n",ans[1]);
}
return 0;
}
优先队列代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<stack>
#include<vector>
#include<algorithm>
//#include<cmath> using namespace std;
const int INF = 9999999;
#define LL long long inline int read(){
int x=0,f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) x=x*10+c-'0';
return x*f;
}
int N,M;
priority_queue<int ,vector<int> , greater<int> > Que;
int a[100001];
int ans[100001];
int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
while(scanf("%d%d",&N,&M)!=EOF){
for(int i=1;i<=N;i++) a[i]=read();
for(int i=1;i<=N;i++)
for(int j=i+1;j<=N;j++){
Que.push(a[i]+a[j]);
if(Que.size()>M) Que.pop();
}
for(int i=1;i<=M;i++) ans[i]=Que.top(),Que.pop();
for(int i=M;i>1;i--) printf("%d ",ans[i]);
printf("%d\n",ans[1]);
}
return 0;
}
【hdu1280】前M大的数的更多相关文章
- HDU1280前m大的数creat at 9:51,3.13,2016
前m大的数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- hdu1280 前m大的数(数组下标排序)
前m大的数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- 【水题】HDU--1280 前m大的数
还记得Gardon给小希布置的那个作业么?(上次比赛的1005)其实小希已经找回了原来的那张数表,现在她想确认一下她的答案是否正确,但是整个的答案是很庞大的表,小希只想让你把答案中最大的M个数告诉她就 ...
- 前m大的数(hdu1280)
前m大的数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- hdu---(1280)前m大的数(计数排序)
前m大的数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- 找出数组前N大的数
这个题也是个比较有名的面试题.当然有很多变种. 题目意思基本是:从一个数据量很大的数组里找前N大的元素.不允许排序. 这个题有两个比较好的思路: 思路一:用快速排序的思想,是思想,不是要排序; 思路二 ...
- HDU 1280 前m大的数
http://acm.hdu.edu.cn/showproblem.php?pid=1280 前m大的数 Time Limit: 2000/1000 MS (Java/Others) Memory L ...
- 输出前n大的数(分治)
描述:给定一个数组包含n个元素,统计前m大的数并且把这m个数从大到小输 出. 输入: 第一行包含一个整数n,表示数组的大小.n < 100000.第二行包含n个整数,表示数组的元素,整数之间以一 ...
- 4J - 前m大的数
还记得Gardon给小希布置的那个作业么?(上次比赛的1005)其实小希已经找回了原来的那张数表,现在她想确认一下她的答案是否正确,但是整个的答案是很庞大的表,小希只想让你把答案中最大的M个数告诉她就 ...
随机推荐
- python进行机器学习(三)之模型选择与构建
Scikit-Learn库已经实现了所有基本机器学习的算法,可以直接调用里面库进行模型构建. 一.逻辑回归 大多数情况下被用来解决分类问题(二元分类),但多类的分类(所谓的一对多方法)也适用.这个算法 ...
- OSI与TCP/IP各层的结构与功能,都有哪些协议
前言: 今天更新一下计算机网络的一些非常重要的知识,可能很多人都不知学计算机网络有什么用,我想说的是它真的比较重要,像咱们学校只要是学计算机这个专业都要学习这门课程.另外大家要是去一些像BAT,阿里, ...
- [干货,阅后进BAT不是梦]面试心得与总结---BAT、网易、蘑菇街
本文转载自:公众号:JANiubility 前言 之前实习的时候就想着写一篇面经,后来忙就给忘了,现在找完工作了,也是该静下心总结一下走过的路程了,我全盘托出,奉上这篇诚意之作,希望能给未来找工作的人 ...
- Ubuntu中启用关闭Network-manager网络设置问题! 【Server版本】
在UbuntuServer版本中,因为只存有命令行模式,所以要想进行网络参数设置,只能通过修改/etc/network/interfaces.具体设置方法如下: (1) UbuntuServer 修改 ...
- Python3 文件基本操作
Python文件的打开模式有: r,只读模式(默认).w,只写模式.[不可读:不存在则创建:存在则删除内容:]a,追加模式.[可读: 不存在则创建:存在则只追加内容:]"+" 表示 ...
- 在 kernel 下打出 有帶參數的log。 怪異現象與解決方式。
code battery_log(BAT_LOG_CRTI, "youchihwang abc10010 xxxaaa8-2\r\n"); battery_log(BAT_LOG_ ...
- Python 如何将字符串转为字典
在工作中遇到一个小问题,需要将一个 python 的字符串转为字典,比如字符串: user_info = '{"name" : "john", "ge ...
- P2327
code[class*="language-"] { padding: .1em; border-radius: .3em; white-space: normal; backgr ...
- 3:django models Making queries 高级进阶--聚合运算
在前一遍文章django models Making queries里面我们提到了django常用的一些检索数据库的内容, 下面我们来看一下更为高级的检索聚合运算 这是我们要用到的模型 class A ...
- HDU-1151
Air Raid Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...