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

· · 题解

::::info[题目大意]{open} 给定 09 每个数字的出现次数,用这些数字组成一个数组,要求让所有位置满足前一个下标不大于后一个下标的数对,拼接起来的数相加的和最大,输出任意一个符合要求的数组就行。 :::: 题意理解完了,讲思路。

思路:

  1. 输入。
  2. 因为每个数对连接之和的贡献就是前面数字的个数加上后面数字的个数 10 倍的和,所以要使数组的连接之和最大,就要使较大数放在前面,较小数放在后面,所要逆循环 9 次。每次循环,循环 c_i 次输出 i
  3. 通过。

代码:

#include <bits/stdc++.h>
#define N 9
using namespace std;
int c[N];
int main() {
    for (int i = 0; i <= 9; i++)cin >> c[i];
    for (int i = 9; i >= 0; i--) {
        while (c[i]) {
            c[i]--;
            cout << i << endl;
        }
    }
    return 0;
}

求过,点赞。