题解:P15063 [UOI 2024 II Stage] Creating an Array

· · 题解

题目简述:

其实就是给你一个数组,表示从 09 中出现的次数,并将它们拼起来,使得拼起来的数最大。

思路点拨:

很简单的一道题,首先统计每个数的个数,再进行降序排列,即最大位在前,最小位在后,最后输出排列后的数组即可。

accode

#include<iostream>
#include<algorithm>
using namespace std;

int a[500], cnt;
bool cmp(int x, int y) {
 return 10 * x + y > 10 * y + x;// 降序比较
}

int main() {
    int c;
    for(int i=0; i<10; i++) {
        cin >> c;
        for(int j=0; j<c; j++) {
            a[cnt++] = i;// 统计出现次数
        }
    }
    sort(a, a+cnt, cmp);// 降序排序
    for(int i=0; i<cnt; i++) {
        if(i) cout << ' ';
        cout << a[i];// 输出即可
    }
    return 0;
}