AtCoder Beginner Contest 128

A / Apple Pie

単位換算してやるだけ。

def solve(A: int, P: int):
    print(int((3*A+P)/2))
    return

B / Guidebook

SとPを組み合わせて、昇順と降順にソートして(SP)、SPのもとの要素がどこにあったかを照らし合わせる。 この問題では複数の配列を組み合わせてソートする方法を学ぶことができた。

def solve(N: int, S: "List[str]", P: "List[int]"):
    # ソートのためにSPを合体
    SP =[]
    for i in range(N):
        SP.append([S[i],P[i]])

    # 都市名は昇順にし、同じ年の場合は降順でソートする 
    t = sorted(SP, key=lambda x:(x[0],-x[1]))

    ans = []
    for x in t:
        for j in range(N):
            x1,x2 = x
            if(x1 == S[j] and x2 == P[j]):
                ans.append(j+1)

    for i in ans:
        print(i)
    return

C / Switches

(on,off)の直積をN個で作って、全部を試す。 初心者ゆえ全探索をするのに組み合わせの「直積」という考え方を知ることができたのが一番の収穫。

def main():
    N,M = map(int,input().split())
    from collections import defaultdict
    d = defaultdict()
    for i in range(M):
        l = list(map(int,input().split()))
        d[i] = l[1:]

    p = list(map(int,input().split()))

    ans = 0
    import itertools
    s = ('on', 'off')
    for i in itertools.product(s, repeat=N):
        anst = 0
        for k,v in d.items():
            if(len([x for x in v if(i[x-1] == 'on')])%2 == p[k]):
                anst += 1

        if(anst == M):
            ans += 1
    
    print(ans)

D / equeue

dfsかな???

E,F