zoukankan      html  css  js  c++  java
  • 7-1 寻找大富翁 PTA 堆排序

    7-1 寻找大富翁 (25 分)

    胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人。假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁。

    输入格式:

    输入首先给出两个正整数N(106​​)和M(10),其中N为总人数,M为需要找出的大富翁数;接下来一行给出N个人的个人资产值,以百万元为单位,为不超过长整型范围的整数。数字间以空格分隔。

    输出格式:

    在一行内按非递增顺序输出资产排前M位的大富翁的个人资产值。数字间以空格分隔,但结尾不得有多余空格。

    输入样例:

    8 3
    8 12 7 3 20 9 5 18
    

    输出样例:

    20 18 12

    简单的排序问题,快排超时了,换了堆排序就过了

    AC代码:

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    #include <vector>
    #include <cstdio>
    #include <malloc.h>
    
    #define INF 0x3f3f3f3f
    #define FRER() freopen("in.txt", "r", stdin)
    #define FREW() freopen("out.txt", "w", stdout)
    
    using namespace std;
    
    const int maxn = 1e6 + 5;
    
    int num[maxn];
    
    void adjust(int s, int m) {
        int temp = num[s];
        for(int j = s * 2; j <= m; j *= 2) {
            if(j < m && num[j] > num[j + 1]) ++j;
            if(temp <= num[j]) break;
            num[s] = num[j];
            s = j;
        }
        num[s] = temp;
    }
    
    void heapSort(int n) {
        for(int i = n / 2; i > 0; --i)
            adjust(i, n);
        for(int i = n; i > 1; --i) {
            swap(num[1], num[i]);
            adjust(1, i - 1);
        }
    }
    
    int main()
    {
        int n, m;
        scanf("%d %d", &n, &m);
        for(int i = 1; i <= n; ++i) 
            scanf("%d", &num[i]);
        heapSort(n);
        for(int i = 1; i <= m && i <= n; ++i) {
            printf("%d%c", num[i], (i == m || i == n) ? '
    ' : ' ');
        }
        return 0;
    }
  • 相关阅读:
    C# 日期格式化
    MVVM框架下,WPF实现Datagrid里的全选和选择
    【转】WPF 给DataGridTextColumn统一加上ToolTip
    C# 获取当前月第一天和最后一天 计算两个日期差多少天
    WPF 弹出UserControl
    斐讯Fir302b救砖教程
    mvc 传递匿名对象
    Java HttpGet
    Java xml object 互转
    HttpClientHandler
  • 原文地址:https://www.cnblogs.com/fan-jiaming/p/10072439.html
Copyright © 2011-2022 走看看