ABC#027の感想

すっかり存在を忘れていて残り時間30分からの挑戦。 Cの解法は解説読んでも釈然としません。
http://abc027.contest.atcoder.jp/

A: 長方形 - AtCoder Beginner Contest 027 | AtCoder

a,b,c = [int(x) for x in input().split()]
if b==c:
    print(a)
elif c==a:
    print(b)
else:
    print(c)

B: 島と橋 - AtCoder Beginner Contest 027 | AtCoder

左の島から見ていって、橋でつないだ島人口の合計が目指すべき島人口×島数になるようにつなぐ。

N = int(input())
A = [int(x) for x in input().split()]
sum_A = sum(A)
if sum_A%N != 0:
    print(-1)
else:
    target = sum_A // N
    cnt = 0
    p = 0
    n = 0
    for i in range(N):
        p += A[i]
        n += 1
        if p == n*target:
            cnt += n-1
            p = 0
            n = 0
    print(cnt)

C: 倍々ゲーム - AtCoder Beginner Contest 027 | AtCoder

N = int(input())
depth = 0
n = N
while n>0:
    depth += 1
    n //= 2
depth %= 2
x = 1
turn = 0
player = ['Takahashi', 'Aoki']
while x<=N:
    if turn+depth == 1:
        x = x*2+1
    else:
        x = x*2
    turn = (turn+1)%2
print(player[turn])

D: ロボット - AtCoder Beginner Contest 027 | AtCoder

それぞれのMに対して右側にある'+'と'-'の個数の差を記録し、その差が少ない半分は'<'、多い半分は'>'とする。

S = input()
A = []
m_cnt = 0
p_cnt = 0
for i in range(len(S)):
    s = S[len(S)-1-i]
    if s == 'M':
        A.append(p_cnt)
        m_cnt += 1
    elif s == '+':
        p_cnt += 1
    elif s == '-':
        p_cnt -= 1
A.sort()
print(sum(A[m_cnt//2:]) - sum(A[:m_cnt//2]))