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)
投稿日時:
最終更新: