hirohirohirohirosのブログ

地方国立大学に通う情報系学部4年

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])