题解:P15063 [UOI 2024 II Stage] Creating an Array
kmszcll2024 · · 题解
此题不难。
题意
给定数字
解题思路
我们首先分析目标函数。设数组长度为
对于固定的位置
- 作为第一个数字:出现在所有
j \ge i 的配对中,贡献10 \cdot a_i ,共(n-i+1) 次,总贡献为10 \cdot a_i \cdot (n-i+1) 。 - 作为第二个数字:出现在所有
k \le i 的配对中(即配对(k,i) ),贡献a_i ,共i 次,总贡献为a_i \cdot i 。
因此,
将系数化简:
由于
我们需要安排给定的数字到各个位置,使得总和
所以从大到小排。输出即可。
做出来了。
代码
#include<bits/stdc++.h>
using namespace std;
int cnt[15];
int main(){
for(int i=0;i<=9;i++){
scanf("%d",&cnt[i]);
}
for(int i=9;i>=0;i--){
while(cnt[i]){cnt[i]--;printf("%d ",i);}
}
return 0;
}