HDU-1425(水题)

来源:互联网 发布:mysql怎么查看表空间 编辑:程序博客网 时间:2024/06/06 09:11

HDU-1425 

Hash1 Sort

给你n个整数,请按从大到小的顺序输出其中前m大的数。 

Input

每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。 

Output

对每组测试数据按从大到小的顺序输出前m大的数。 

Sample Input

5 3

3 -35 92 213 -644

Sample Output

213 92 3

 

  

Hint

请用VC/VC++提交

 


做了一下午的多校再做这种水题很爽,正好 2017 Multi-University Training Contest - Team 3 1003,也是个求第k大的数,虽然那题没做出,思路也差很多,但

做这题是没问题的。hash1 sort  用哈希,效率问题,但搞不懂为什么排序也要用哈希,既然只要前m大的,那就先取m个数排下序,最小的找出,与下一个存的

数比较,比它大就存进去,用vector操作比较方便,最后排序,输出。

#include<iostream>#include<cstdio>#include<algorithm>#include<vector>using namespace std;const int N=1e6+10;bool cmp(int a,int b){    return a>b;}int main(){    int n,m,x;    while(scanf("%d%d",&n,&m)!=EOF&&n&&m){        vector<int>v;        v.clear();        for(int i=0;i<m;i++){            scanf("%d",&x);            v.push_back(x);        }        sort(v.begin(),v.end(),cmp);        for(int i=m;i<n;i++){            scanf("%d",&x);            if(*(v.begin()+m-1)<x)                v.push_back(x);        }        sort(v.begin(),v.end(),cmp);        printf("%d",*v.begin());        for(vector<int>::iterator i=v.begin()+1;i!=v.begin()+m;i++){            printf(" ");            printf("%d",(*i));        }        printf("\n");    }    return 0;}



原创粉丝点击