ABC139参加記録

スポンサーリンク

ABC139に参加した。

atcoder.jp


せっかくブログをやっているので、参加記録を初めて書いてみることにした。
参加回数5回灰コーダーという新米競プロerですが、なんとかDまで解けた。
(Dを解いたのは何気に初)


なお、言語はすべてPythonです。

A - Tenki

落としてはいけない問題。
合致する文字の数を求めればよいので、forで一文字ずつ見ていって判定。
以下コードでAC。

s=input()
t=input()
cnt=0
for i in range(3):
        if s[i]==t[i]:
                cnt+=1
print(cnt)

B - Power Socket

落としてはいけない問題その2。
電源タップを連ねるお話。
B個口以上にするにはA個口のタップが最低何個必要か?とのこと。

「とりあえず、例1のA=4,B=10で順番に考えてみよか。。。」

f:id:tkhstol-929:20190902223841j:plain
B

(B-1)/(A-1)の切り上げが答えになることに気づく。
A>=2で0除算も気にしなくてよかったので、以下コードでAC。

import math
a,b=map(int,input().split())
print(math.ceil((b-1)/(a-1)))

C - Lower

DPで解いた。(公式解説とは違う解法?)
元のままだとやりにくかったのでlistを逆順にしたけど、そのままでもいけた説ある。

f:id:tkhstol-929:20190902224000j:plain
c

まず与えられたListを逆順にする。
そしてi番目がi-1番目より大きい(h[i] >= h[i-1])ならば登れるので、+する。
そうでなければ(h[i] < h[i-1])、登れないので0。

以下コードでAC。

n=int(input())
h=list(map(int,input().split()))
h=h[::-1]
dp=[0]*n
for i in range(1,n):
        if h[i] >= h[i-1]:
                dp[i] = 1+dp[i-1]
print(max(dp))

D - Mod Sum

いつもはC解けた段階で撤退するけど、なんか調子よかったのでDも挑戦。
練習でもDは解いたことなかったのでドキドキしながら問題文を読む。

「初めてのD問題や」

「modの総和の最大化、、、なんか難しそうや、、、」

「総和を最大化ってことは、ひとまず各項を最大化せなあかんな」

f:id:tkhstol-929:20190902225020j:plain


「余りが大きくなるときは、自分よりも大きい数で割られたときやな」

「これ、1からn-1までの和でいいのでは?」

半信半疑で以下コードを提出。難なくAC。

n=int(input());print(n*~-n//2)


「D問題解けた!俺って天才か?!」
と舞い上がっていたが、コンテスト後にTwitter見てると「Dにしては簡単すぎ」「入力例見たら一発で分かった」とかがいっぱい書かれてちょっと凹む。

EFは未着手。解ける気がしなかった。


結果

レーティングは160→292に上がった。
パフォーマンスは1000ちょっとで、緑パフォ。
そろそろ茶コーダーになりたい。


余談:
解説放送って、生放送でする意味あるんでしょうか。
前撮りしてコンテスト終了後に公開、じゃダメなのか。

f:id:tkhstol-929:20190831153745p:plain
AtCoder

にほんブログ村 IT技術ブログへ
にほんブログ村