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かな???