寻找大富翁分数(简洁AC+坑人测试点说明)

胡润研究院的调查显示,截至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

这题真是服了,我原本以为测试点2是如果并列排名,也要输出,结果。。。。。。。。。我改了并列输出以后测试点1也错了,所以这里排名不能并列输出。。。。。那么神奇的测试点2到底是什么呢。。。。。。结果是当K>N的时候!本人已经欲哭无(T——T)

#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(long x,long y) { return x >= y; }
int main()
{
    long N,K,num[1000001];
    cin >> N >> K;
    if(K>N) K = N;
    for(long z=0;z<N;z++) cin >> num[z];
    sort(num,num+N,cmp);   //(sort 实在是太方便了,都要导致本人自己都不会快排跟归并了,咳咳~)

    cout << num[0];
    for(int z=1;z<K;z++) cout << " " <<num[z];
//         int flag = 0;                            // 下面俩行并列输出语句
//     while(num[K-1]==num[K+flag]) cout << " " << num[K+flag++];
    return 0;
}
经验分享 程序员 微信小程序 职场和发展