Atcoder ABC260 振り返り
A - A Unique Letter【AC】
Counter関数を使いました.今回の入力popだとCounter({'p': 2, 'o': 1})が得られます.後は,items()で値を取りだし,要素が1つしか無いものを表示します.
import collections s = list(input()) c = collections.Counter(s) for v, n in c.items(): if n == 1: print(v) break else: print(-1)
B - Better Students Are Needed!【AC】
ソートする際に,受験者の番号を保持しておくため[点数, 受験者の番号]を要素としてソートします.また,点数は高い順に並べたいので,点数にマイナスを掛けておきます.
既に合格済みの生徒はpass_setに入れておきながら,問題文の通りに合格者を決めていきます.
N, X, Y, Z = map(int, input().split()) A = [[-int(v), i+1] for i, v in enumerate(input().split())] B = [[-int(v), i+1] for i, v in enumerate(input().split())] C = [[A[i][0] + B[i][0], i+1] for i in range(N)] A, B, C = sorted(A), sorted(B), sorted(C) pass_list = [] pass_set = set() for i in range(X): pass_set.add(A[i][1]) pass_list.append(A[i][1]) cou = 0 for i in range(N): if cou == Y: break if B[i][1] not in pass_set: pass_set.add(B[i][1]) pass_list.append(B[i][1]) cou += 1 cou = 0 for i in range(N): if cou == Z: break if C[i][1] not in pass_set: pass_set.add(C[i][1]) pass_list.append(C[i][1]) cou += 1 for p in sorted(pass_list): print(p)
C - Changing Jewels【AC】
動的計画法のことは一切頭にないまま実装しました.リストのkey iにレベルiの宝石の個数を入れます.赤い宝石と青い宝石の変換をそれぞれN回行うのが最大なのでN回ループしblue[1]を表示させます.
N, X, Y = map(int, input().split()) red = {i:0 for i in range(1, N+1)} blue = {i:0 for i in range(1, N+1)} red[N] = 1 for n in range(N, 1, -1): red[n-1] += red[n] blue[n] += red[n]*X red[n-1] += blue[n] blue[n-1] += blue[n]*Y print(blue[1])