CF349B 题解
这种水 1700 的题解通道竟然还没关闭。
思路
首先数字判定大小的规则是先看位数,再从头到尾比较大小,所以我们首先要是位数最大。在数字和一定的情况下,要使个数最大,肯定要优先用 最小的 去填充,并把这个 称之为 (如果有多个 最小,则用 最大的那个)。然后剩下的结余从 ,从 去枚举并贪心替换答案。
代码
# include <bits/stdc++.h>
using namespace std;
int n, len, a[10], ans[1000005], mini, minx = 114514, x;
int main () {
ios::sync_with_stdio (0);
cin.tie (0);
cout.tie (0);
cin >> n;
for (int i = 1; i < 10; ++ i) {
cin >> a[i];
if (a[i] <= minx)
minx = a[i], mini = i;
}
len = n / minx, x = n % minx;
if (! len) {
cout << -1;
return 0;
}
for (int i = 1; i <= len; ++ i) {
for (int j = 9; j > mini; -- j)
if (a[j] - minx <= x) {
x -= a[j] - minx;
cout << j;
goto there;
}
for (int j = i; j <= len; ++ j)
cout << mini;
break ;
there:
;
}
return 0;
}

浙公网安备 33010602011771号