TUATPC2024Summer (Algorithm)
コンテスト日時
2024/09/26 (Th) 20:00 - 23:00

F - MCC Sequence (Construct Version)

Benihuki
2
s
1024
MB
200

問題文

長さ $n$ の数列 $a = (a_1, \dots, a_n)$ に対し、$f(a)$ を次の条件をすべて満たす整数 $(i, j, k)$ の組の個数と定義します。この定義はE問題と同じです。

  • $1 \le i < j < k \le n$
  • $a_i \ne a_j$
  • $a_i \ne a_k$
  • $a_j = a_k$

正整数 $M$ が与えられます。次の条件をすべて満たす長さ $N$ の数列 $A$ を $1$ つ答えてください。

  • $3 \le N \le 2 \times 10^5$
  • すべての $1 \le i \le N$ について、$1 \le A_i \le N$
  • $f(A) = M$

なお、本問題の制約下で、条件をすべて満たす $A$ が $1$ つ以上存在することが証明できます。また、条件をすべて満たす $A$ が複数存在する場合、どれを答えても構いません。

制約

この問題では、Easy の部分点の獲得方法が他の問題と異なります。

Hard (100点)

  • $0 \le M \le {10}^{14}$
  • $M$ は整数

Easy (100点)

  • Hard の制約に以下の制約を追加
  • $M \in \lbrace 2, 3, 5, 8, 13, 21, 34, 55, 89, 144 \rbrace$
    • $M$ の値に応じて、次の点数が割り振られている。それぞれのケースに正解すると、割り振られた点数を獲得することができる。
      • $M = 2, 3$ : $2$ 点
      • $M = 5, 8$ : $6$ 点
      • $M = 13, 21$ : $10$ 点
      • $M = 34, 55$ : $14$ 点
      • $M = 89, 144$ : $18$ 点
    • 例えば、$M = 2, 3, 8, 34$ のケースに正解した場合、$2 + 2 + 6 + 14 = 24$ 点を獲得できる。
部分点のみ解答したい場合

部分点のみを解答したい場合、問題によっては結果が TLE となるケースが大量に発生し、ジャッジに時間がかかる可能性があります。

C++の assert 関数やPythonの assert 文などを用いて、変数の値によってプログラムを強制終了させる処理を書き加えることで TLE を防ぎ、より早く結果を得ることができます。

入力

入力は以下の形式で標準入力から与えられます。

$M$

出力

答えを次の形式で出力してください。

$N$
$A_1 \ \ \dots \ \ A_N$

入力例 1
10
出力例 1
9 9 9 8 2 4 4 3 5 3

他に、以下のような出力も正解となります。

7
1 2 2 3 2 2 3

この入力例は Hard の制約を満たします。

提出
C++23 (g++ 12.2.0)