construct 题解
题目描述
给定一个正整数 \(n\)。
请你构造一个由不超过 \(300\) 个正整数组成的序列 \(a\),满足:
- 对于任意 \(1\le x\le n\),都可以从序列 \(a\) 中选择至多 \(3\) 个不同的元素(但是值可以相同),使得这三个元素的和为\(x\);
- 构造的整数的数量不小于\(1\)个且不超过\(300\)个
- 序列中的每个元素都不超过 \(10^6\),且不小于\(1\)。
注意:选择的是序列中的元素,因此如果序列中存在多个相同的数,它们可以被分别选择。
由于答案不唯一,本题采用 Special Judge 判断输出是否合法。
思考
这是一个构造题目,我们考虑对于数按照数位来拆解.
同时我们要使用诺干受限个元素构造出大量的值,我们考虑按照数位结构来拆分.
我们怎么拆分呢?显然我们不会拆分我们最终构造的元素,因为最终构造的元素的数位会在加法中被破坏.
我们考虑从最终构造的结构数切入.
按照位考虑,我们将其划分为一个长度为\(6\)的数字串.对于值小于\(10^6\)的,补上前导\(0\)
例如我们现在有数字\(abcdef\),我们把他拆为三个数的和,\(ab \times 10^4+cd \times 10^2+ef\)
显然,\(ab,cd,ef\)都只有100中,但是由于我们是算的和,没有那个乘上10的多少次方,所以要分解为\(ab \times 10^4,cd \times 10^2,ef\)而显然,这三个每项至多只有100种,总共300种.且使用这300种可以构造出\([1,10^6]\)中任何一个值.

浙公网安备 33010602011771号