CF349B 题解

这种水 1700 的题解通道竟然还没关闭

思路

首先数字判定大小的规则是先看位数,再从头到尾比较大小,所以我们首先要是位数最大。在数字和一定的情况下,要使个数最大,肯定要优先用 aia_i 最小的 ii 去填充,并把这个 ii 称之为 minimini(如果有多个 aia_i 最小,则用 ii 最大的那个)。然后剩下的结余从 ansnans1ans_n\sim ans_1,从 9mini+19\sim mini+1 去枚举并贪心替换答案。

代码

# 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;
}
posted @ 2024-03-25 10:25  Vitamin_B  阅读(16)  评论(0)    收藏  举报  来源