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

· · 题解

题目大意

给你 09 十个数字出现的次数,再用这些数组成一个数组,使得这些数字组合起来的值最大。任意输出一种排列的方法即可。

题目解法

要使它们排列起来最大,我们就可以将它们从大到小排列,最后再输出。

那怎么存这些数呢?我们可以先定义一个数组,只要某个数出现了 n 次,就循环 n 遍将这个数加入数组里,再排序输出就行了。

如果你和我一样懒得写 cmp 函数,就可以先从小到大排序,再倒序输出。

AC Code

#include <bits/stdc++.h>
using namespace std;
int a[11], b[501], cnt;
int main(){
    for ( int i = 1 ; i <= 10 ; i ++ ){
        cin >> a[i];
        if ( a[i] ){
            for ( int j = 1 ; j <= a[i] ; j ++ ){
                b[++cnt] = i - 1;
            }
        }
    }
    sort ( b + 1, b + cnt + 1 );
    for ( int i = cnt ; i >= 1 ; i -- ){
        cout << b[i] << " ";
    }
    return 0;
}