pythonで青くなるブログ

主に競プロのについての記事(日記的な)を書きます。現在atcoder水色,こどふぉ青色。python3使って、やってます。atcoder青くなりたい

ABC 069 D - Decrease (Contestant ver.)

内容

  • ABC069のD - Decrease (Contestant ver.)(600点)をpythonで解いた。

問題

atcoder.jp

考えたこと

  • 操作を逆から考えて、答えを構築する。
  • とりあえず、N=50にして、初期値をN-1にして構築してみる。

  • 各iでの操作回数をできるだけ同じようにすることで、構築できる。

ポイント

  • 逆操作を考える。
  • 全てにできるだけ平等にKを割り振る。

    実装

#[N-1]*Nから、逆操作をして構築していく。
K = int(input())
N=50 #N=50で固定してやる

ans=[N-1]*N #初期値は全てN-1

d = K//N # 全てにd回の操作をする
r = K % N  #r個には追加で1回操作をする

for i in range(N):
    ans[i] += N*d #d回の操作での増加分
    ans[i] -= d*(N-1) #他の(N-1)この操作に対する減少分

for i in range(r): #r個には追加で一回操作
    ans[i] += N-(r-1)

for i in range(r,N):#残りの奴らは引かれるだけ
    ans[i] -=r
print(N)
print(" ".join(map(str,ans)))

終わりに

  • 最近コロナで一人の時間が増えたので、体を動かすためにランニングを始めました。(ランウォッチと、新しいランニングシューズがほしくなってしまった。)
  • どうやら、apple watchスマホを持たずに走っても、GPSの機能で距離とタイムを計測してくれるらしい。すごい!

www.apple.com