AtCoder Beginner Contest 163 / Python


f:id:penyooo:20200112235130p:plain


  • 初学者です。( 2019 / 9 ~ 現在8ヵ月目 )
  • AtCoder の問題に Python で取り組んでいます。
  • ABC で4問目(茶か緑)まで解けることを目標にしています。

完全に独学なのでコードは酷いと思います。

AtCoder やってる方、お気軽にコメントください。





結果


f:id:penyooo:20200419233255p:plain

今回、だいぶ簡単だった気がする。

しかし残念ながら不具合の影響でアンレイティッドになりましたね。

何だろう参加者が1万人を超えると無理なのだろうか、前回もだよね。

ロームで問題が開けなくなっていた。

f:id:penyooo:20200419212528p:plain

こんな感じで。見事に問題の内容だけ表示されていない。

誰も見れてないのかな、と思っていたら順位表が更新されていたので、
おい、見れてる人もいるんかい!とブラウザをエッジに変えたら見れた。

ちなみに、これを書いている現在、まだ直っていない。
ロームだめなんかな、毎回エッジで開いた方が良いんだろうか。

あと1問目の採点が「内部エラー」ってなる不具合も起きていた。



あのね、まあ良いんだけどね、不具合はさ。



前回、不具合に右往左往してしまって過去最低の順位で終えたんだけど。

それはレーティング有りになったのね。

でさ、今回は再びの不具合にもめげず、人数比で過去最高順位なんよ。

そんで今回はレーティング無し

何の嫌がらせじゃーーーーーーーーーい!!!



はぁ・・・クレーマークレーマーはこのくらいにして問題いきますか。





問題と解答と勉強


atcoder.jp



提出したコード
import math

print(int(input()) * 2 * math.pi)









atcoder.jp

提出したコード
N, M = map(int, input().split())
A = list(map(int, input().split()))
 
if N - sum(A) >= 0:
    print(N - sum(A))
else:
    print(-1)









atcoder.jp



提出したコード
import collections
 
N = int(input())
A = list(map(int, input().split()))
 
c = collections.Counter(A)
 
for i in range(1, N+1):
    print(c[i])



Counter() に丸投げは通らないかと思ったが、通ってしまった。







atcoder.jp



提出したコード
N, K = map(int, input().split())
 
print(int(((N*(N+1)*(N+2)-K*(K-1)*(3*N-2*K+4))/6+N-K+2)%1000000007))



よくわからんかったから数学で解いてしまった。




f:id:penyooo:20200420015804p:plain

f:id:penyooo:20200420020527p:plain

f:id:penyooo:20200420025820p:plain

f:id:penyooo:20200420030434p:plain



ということで、ただの数学の問題だった。

Σ は取らないで for で回した方が早そうだけど、
この際なので、もう全部数学で解いてみた。







atcoder.jp



結構ベタな動的計画法

どうせ解けないと思って4問目で遊んでしまったが考えれば良かった。

勉強用
n = int(input())
a = [(_a, i) for i, _a in enumerate(map(int, input().split()))]
a.sort(reverse=True)
 
dp = [[0]*(n+1) for _ in range(n+1)]
for i, (v, p) in enumerate(a):
    # 前にj人いる
    dp[i+1][0] = dp[i][0] + v*abs((n-1 - i) - p)
    for j in range(1, i+1):
        dp[i+1][j] = max(dp[i][j] + v*abs((n-1 - (i-j)) - p),
                         dp[i][j-1] + v*abs((j-1) - p))
    dp[i+1][i+1] = dp[i][i] + v*abs(i - p)
print(max(dp[n]))









atcoder.jp



6問目は恒例のパスで。