ABC260 B-問題
ポイント
・リストの最大値とインデックスを取得する
・合格者の得点を「-1」にする
自分のスキルでは、高難度の問題なので色々な方の回答を参考にしました。
260B.py
N,X,Y,Z = map(int,input().split())
Sugaku = list(map(int, input().split()))
Eigo = list(map(int, input().split()))
# 合格者リスト
ans = []
for i in range(X):
# Sugaku リストの最大値のインデックスを取得する
Smax_IDX = Sugaku.index(max(Sugaku))
# 合格者リストに格納する
ans.append(Smax_IDX)
# 合格者リストに格納したので、選考から外すために得点を -1 にする
Sugaku[Smax_IDX] = -1
Eigo[Smax_IDX] = -1
for i in range(Y):
# Eigo リストの最大値のインデックスを取得する
Emax_IDX = Eigo.index(max(Eigo))
# 合格者リストに格納する
ans.append(Emax_IDX)
# 合格者リストに格納したので、選考から外すために得点を -1 にする
Sugaku[Emax_IDX] = -1
Eigo[Emax_IDX] = -1
Both = []
for i in range(N):
Both.append(Sugaku[i] + Eigo[i])
for i in range(Z):
# 数学+英語の得点を合わせたリストの最大値のインデックスを取得する
Both_IDX = Both.index(max(Both))
# 合格者リストに格納する
ans.append(Both_IDX)
# 合格者リストに格納したので、選考から外すために得点を -1 にする
Both[Both_IDX] = -1
# 条件通り小さい値順にソートする
ans.sort()
for i in ans:
# インデックスの値なのでプラス1する
print(i + 1)
ABC261 C-問題
ポイント
- 連想配列で入力されてくる文字をカウントする。
使い方をマスターすれば、色んな場面で使えると思いました。
※C++ では、map を使っていた。
261C.py
from collections import defaultdict
N = int(input())
# 連想配列でカウントする
cnt = defaultdict(int)
for i in range(N):
S = str(input())
# その文字が初めて出現した場合
if cnt[S] == 0:
print(S)
# 複数回出現した場合
else:
print(S + '(' + str(cnt[S]) + ')')
# 忘れずにプラス1
cnt[S] += 1