1. 程式人生 > 其它 >ABC 251 | D - At Most 3 (Contestant ver.)

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;
}