zoukankan      html  css  js  c++  java
  • Hdoj 1425.sort 题解

    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
    
    
    
    Hint请用VC/VC++提交 
    

    Author

    LL

    Source

    ACM暑期集训队练习赛(三)


    思路

    就是桶排序,又因为区间在([-500000,500000]),数组的下标最小为0,所以用一个映射,当我们读进来一个数字的时候,让他(+500000)放在对应位置的桶里面,后面输出的时候要对应减去500000

    代码

    #include<bits/stdc++.h>
    using namespace std;
    int a[1000010];
    int main()
    {
    	int n,m,t;
    	while(~scanf("%d%d",&n,&m))
    	{
    		memset(a,0,sizeof(a));
    		while(n--)
    		{
    			scanf("%d",&t);
    			a[t+500000]++;
    		}
    		for(int i=1000000;i>=0;i--)
    		{
    			if(a[i]!=0 && m>0)
    			{
    				if(m==1)     //如果是m个数中的最后一个数字,就不输出空格 
    					printf("%d",i-500000);
    				else
    					printf("%d ",i-500000);
    				m--;
    			}
    			if(m<=0) break;
    		}
    		cout << endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    冲刺阶段第三天
    冲刺阶段第二天
    冲刺阶段第一天
    工作项估计
    学习进度条(7-9周)
    团队计划会议01
    第一次冲刺阶段(一)
    软件项目团队报告
    团队项目会议第一次
    团队开发项目需求简介
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/10181059.html
Copyright © 2011-2022 走看看