Port 53

明日のための技術メモ

AtCoder ABC143

AtCoder ABC143解いた分だけ書きます。
今回は試験前日だったので、本番は不参加。
次回もCTF大会中なので、AtCoder復帰は来月からになりそう。

A. Curtain

問題によれば、窓枠とカーテンの横幅が与えられるので、
カーテンで埋まらなかった分の長さを求める。 当然、カーテンの方が大きいこともあるので、その場合は0。
つまり、0とa-2*b(カーテンが窓より小さい時)のうち、大きい方が答え。

#coding:utf-8
a, b = map(int, input().split())
print(max(0, a - 2*b))

B. TAKOYAKI FESTIVAL 2019

問題によれば、たこ焼き2個選ぶ全組み合わせについて、
おいしさの合計を出す必要がある。単純に2重ループ(O(N2))で解ける。
この時、内側のループは外側のループより+1からスタートすれば、重複回避可能。
うまくやると計算量O(N)でいけるらしい。うーん...

#coding:utf-8
n = int(input())
d = list(map(int, input().split()))

ans = 0

for i in range(0, n):
    for j in range(i+1, n):
        ans += d[i] * d[j]

print(ans)

C. Slimes

問題によれば、隣り合った同じ色のスライムが合体する。
文字列の重複削除も考えたけど、色の境目を見てカウントした方が良さそう。
ただし、最初の1個が抜けるので、カウンタは1から始める。

#coding:utf-8

n = int(input())
s = list(input())
# 最初の1種類はカウントしておく
count = 1
# 色の境目が見えたら別個体になる
for i in range(0, n-1):
    if s[i] != s[i+1]:
        count += 1

print(count)

D. Triangles

後日まとめます。解説や蟻本見つつ