CDOJ 输出前m大的数据

来源:互联网 发布:中国保险网络大学堂 编辑:程序博客网 时间:2024/04/28 21:21

输出前m大的数据
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)

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

Input
题目包含多组测试数据,以EOF结束。

每组测试数据有两行,第一行有两个数n,m(0

#include <stdio.h>#include <string.h>#define N 1000000int a[N];int main(void){  int i,j,n,m,t;     while(scanf("%d%d",&n,&m)==2)    {  memset(a,0,N*sizeof(int));        for(i=0;i<n;i++)        {  scanf("%d",&t);            a[t+N/2]++; //下标对应数+N/2,元素值存储重复次数         }        for(t=0,i=N-1;t<m && i>=0;)        {  if(a[i]>0)//对应有数             {  printf("%d ",i-N/2);//打印对应的数                 t++;  //计数器增加                 if(--a[i]==0)   i--;            }            else   i--;        }        printf("\n");    }    return 0;}
#include <iostream>#include <sstream>#include <iomanip>#include <vector>#include <deque>#include <list>#include <set>#include <map>#include <stack>#include <queue>#include <bitset>#include <string>#include <numeric>#include <algorithm>#include <functional>#include <iterator>#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#include <cctype>#include <complex>#include <ctime>typedef long long LL;const double pi = acos(-1.0);const long long mod = 1e9 + 7;using namespace std;int a[1000005];int N = 1000000;int main(){    int n,M;    while(scanf("%d %d",&n,&M) == 2)    {        memset(a,0,sizeof(a));        int t;        for(int i = 0;i < n;i++)        {            scanf("%d",&t);            a[t + N / 2]++;        }        for(int i = N - 1,l = 0;i >= 0 && l < M;)        {            if(a[i] != 0)            {                printf("%d ",i - N / 2);                a[i]--;                l++;                if(a[i] == 0)                    i--;            }            else                i--;        }        printf("\n");    }    return 0;}
0 0
原创粉丝点击