ABC 251 | D - At Most 3 (Contestant ver.)

题目描述

给定一个数\(W\),你需要准备一批砝码以满足以下条件:

  • 砝码的数量在\(1 \sim 300\)之间(包括\(1\)\(300\)).
  • 每个砝码的重量不超过\(10^6\)
  • 可以用至多\(3\)个不同砝码表示\(1 \sim W\)之间的每一个数(包括\(1\)\(W\)).

数据范围

\(1 \le W \le 10^6\)

题目解析

对于任意一个十进制六位数\(\overline{abcdef}\),可作如下拆解:

\[\begin{align*} \overline{abcdef} = \overline{ab0000} + \overline{cd00} + \overline{ef} \end{align*} \]

这样一个\(10^6\)范围内的数可被拆解为三个\(10^6\)范围内的数的和,砝码数量为\(298\)个.
对于所有样例,输出这一组答案即可。

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1e6;

int main()
{
    printf("%d\n", 298);
    for(int i = 1; i < 100; i ++) printf("%d ", i);
    for(int i = 100; i < 10000; i += 100) printf("%d ", i);
    for(int i = 10000; i <= 1000000; i += 10000) printf("%d ", i);
    return 0;
}

posted @ 2022-06-06 09:30  小菜珠的成长之路  阅读(59)  评论(0)    收藏  举报