D - リミックスジュース 解説 by potato167


実は制約を満たす全ての \(N,X\) で条件に当てはまる入力が存在します。

\(k=100\) とします。

整数 \(l\) を用いて \(X=\frac{l(l+1)}{2}\) と表せるとき、\(i\leq l\) なら \(a_{i}=0\) そうでないなら \(a_{i}=999\) とすることで条件を満たすことができます。

整数 \(1\leq b<N\) を用いて、 \(X=\frac{N(N-1)}{2}+b\) と表せるときは、\(i=1,1+b\) なら \(a_{i}=100\) そうでないなら \(a_{i}=0\) とすることで条件を満たすことができます。

上の二つを組み合わせることで、任意の \(X\)\(\frac{l(l+1)}{2}+b\) と表すことができる整数 \(0\leq b\leq l\leq N\) が存在するので、当てはまる入力を構築することができます。

計算量は \(O(N)\) です。

N,X=map(int,input().split())
ans=[0]*N
for l in range(N+1):
  if X==(l*(l+1))//2:
    for i in range(N):
      if i<l:
        ans[i]=0
      else:
        ans[i]=999
    break
  if X<(l*(l+1))//2:
    b=X-(l*(l-1))//2
    for i in range(N):
      if i==0 or i==b:
        ans[i]=100
      elif i<l:
        ans[i]=0
      else:
        ans[i]=999
    break
print(100)
print(*ans)

投稿日時:
最終更新: