Subscribed unsubscribe Subscribe Subscribe

stkblog

白血病と関係ないことを書きます なにかあったら教えて下さい

Codefestival 決勝 A-E 勝手にやった

Codefestival python

code-festival-2015-final-open.contest.atcoder.jp

A コード川柳

A: コード川柳 - CODE FESTIVAL 2015 決勝(オープンコンテスト) | AtCoder
文字列の長さが575かどうか調べる。

inputs = raw_input().split()
lengths = map(len, inputs)
if lengths == [5,7,5]:
    print 'valid'
else:
    print 'invalid'

B ダイスゲーム

B: ダイスゲーム - CODE FESTIVAL 2015 決勝(オープンコンテスト) | AtCoder

N個のダイスを投げた目の和として最も確率の高い、最小の数

N = input()

if N == 1:
    print 1
else:
    print int(3.5*N)

「和の期待値は期待値の和」とかあったと思う

C 寿司タワー

C: 寿司タワー - CODE FESTIVAL 2015 決勝(オープンコンテスト) | AtCoder

できるだけ寿司を分解せずに、求める寿司タワーを作る(リンク先参照

N = input()
tower = list(raw_input())

for i in xrange(2*N-1):
    if tower[i] != '2' and tower[i] != tower[i+1]:
        tower[i] = tower[i+1] = '2'
    #そのままつかえるものはそのまま使う(→2に変えてみた)

answer = N - tower.count('2') / 2 #そのままつかえないもの÷2
print answer

GOAL GATE 高原直泰 1979‐2003

GOAL GATE 高原直泰 1979‐2003

D 足ゲームII

D: 足ゲームII - CODE FESTIVAL 2015 決勝(オープンコンテスト) | AtCoder
(N−1)個の区間を埋めるための最小値(リンク先参照

いきなり難しくない?解説も見たけどピンとこず
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 決勝 : D - 足ゲームII - kmjp's blog


こういうことかなと思ったけど

# TLE
N = input()
buttons = [map(int, raw_input().split()) for loop in xrange(N)]

times = list(set([item for sublist in buttons for item in sublist]))
times.sort() #境目となる時間リスト

needs = []
for time in times:
    cnt = 0
    for button in buttons:
        if button[0] <= time < button[1]:
            cnt += 1
    needs.append(cnt)
#必要な人数リスト

peaks = [i for i in xrange(N) if needs[i] == max(needs)] #そのピーク
sta, end = peaks[0], peaks[-1]+1
sta, end = times[sta], times[end]

for button in buttons:
    if button[0] <= sta and end <= button[1]:
        covered = True
        break
else:
    covered = False
# それをカバーする区間があれば True

print max(needs) - (covered)

E ショートコーディング

E: ショートコーディング - CODE FESTIVAL 2015 決勝(オープンコンテスト) | AtCoder
! と - からなる言語のコードと等価な、最短のコード

入力が 0 と それ以外 で結果変わるんだろうだなと思いながら実験 (test)、有限っぽいので短い順に(長さ3まで)試して書いた

S = list(raw_input())
S = S[::-1]

def test(S):
    a, b = 0, 256
    for s in S:
        if s == '-':
            a = -a
            b = -b
        elif s == '!':
            a = 0 if a != 0 else 1
            b = 0 if b != 0 else 1
    return a, b

def solve(S):
    if test(S) == (0, 256):
        return ''
    elif test(S) == (0, -256):
        return '-'
    elif test(S) == (1, 0):
        return '!'
    elif test(S) == (0, 1):
        return '!!'
    elif test(S) == (-1, 0):
        return '-!'
    elif test(S) == (0, -1):
        return '-!!'

print solve(S)

まあACになってよかった