巧用hash

xiaoxiao2021-02-28  41

Problem Description 给你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

#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; int Num[1000010]; int cmp(int a,int b) { return a > b; } int main() { int N,M; while(~scanf("%d%d",&N,&M)) { for(int i = 0; i < N; ++i) scanf("%d",&Num[i]); sort(Num,Num+N,cmp); for(int i = 0; i < M; ++i) if(i != M-1) printf("%d ",Num[i]); else printf("%d\n",Num[i]); } return 0; } #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; int Num[1000010]; int main() { int N,M,d; while(~scanf("%d%d",&N,&M)) { memset(Num,0,sizeof(Num)); for(int i = 0; i < N; ++i) { scanf("%d",&d); Num[d+500000]++; } int Cnt = 0; for(int i = 1000000; i >= 0; --i) { while(Num[i]) { Num[i]--; Cnt++; if(Cnt != M) printf("%d ",i-500000); else { printf("%d\n",i-500000); } } if(Cnt == M) break; } } return 0; }
转载请注明原文地址: https://www.6miu.com/read-2621021.html

最新回复(0)