天色グラフィティ

技術ちっくなことを書きます

AGC024に参加しました (445位)

f:id:ejinote:20180521194539p:plain

AGC024に参加しました。A・B・Cを3完し、Dを途中まで解いて散りました。レートは1240→1334となりました。 順調に水色を進んでいます。早く暖色になるぞという強い意志を持ってやっていきたいと思います。

と書いておいてウケるんですが、先週末土曜日にあったGCJ Round2はぶっちしてしまいました。 飲み会に参加していて気づいたら0時だったのでもう無理でした。しまった。

前回のAtCoder

amalog.hateblo.jp

振り返り

A - Fairness

https://beta.atcoder.jp/contests/agc024/tasks/agc024_a

Cは両方に足され続けるので無視して問題ない。すなわち、操作を行うたびにAとBが入れ替わり続ける。 よって操作回数が偶数ならA-Bを、奇数ならB-Aを出力すればよい。

a, b, c, k = map(int, input().split())
if abs(a-b) > 1e18:
    print('Unfair')
elif k%2==0:
    print(a-b)
else:
    print(b-a)

B - Backfront

https://beta.atcoder.jp/contests/agc024/tasks/agc024_b

正しい順番に並んでいる部分列の最長を求めて、正しくない順番に並んでいる要素を正しい場所に移せばよい。

N = int(input())
cache = dict()
for i in range(1, N+1):
    p = int(input())
    cache[p] = cache.get(p-1, 0) + 1
print(max(cache.values()))

C - Sequence Growing Easy

https://beta.atcoder.jp/contests/agc024/tasks/agc024_c

def solve():
    N = int(input())
    ans = 0
    prev = None
    for _ in range(N):
        a = int(input())    
        if prev is None and a!=0:
            return -1
        if prev is not None:
            diff = a - prev
            if diff >= 2:
                return -1
            elif diff <= 0:
                ans += prev
        prev = a
    ans += prev
    return ans

if __name__=='__main__':
    print(solve())