「AtCoder Beginner Contest 119」に出て、3完でした。
C問題の実装に苦しみ、時間をほぼ使ってクソコードで通しました。
B - Digital Gifts(200点)
- 一つずつ、条件分岐して足し上げる
- [float, str]という入力列が来るので、取りあえず両方strで受け取って、計算時にfloatに戻してあげる
N = int(input()) A = [] for i in range(N): A.append(list(input().split())) ans = 0 for a in A: if a[1] == 'JPY': ans += float(a[0]) else: ans += float(a[0]) * 380000.0 print(ans)
C - Synthetic Kadomatsu(300点)
- 愚直に要件通りに実装する
- 1回目の提出で最後のテストケースだけREになったので、恐らくエラーの発生した箇所を特定し、try~exceptも使ったクソコード
import itertools import numpy as np import copy ansl = [] N, A, B, C = list(map(int, input().split())) a = [] for i in range(N): a.append(int(input())) def get_ptn(la): ptn = [] for i in range(1, len(la) + 1): ptn.append(list(itertools.combinations(la, i))) return ptn takes = list(itertools.permutations([A, B, C])) for take in takes: try: ta = copy.deepcopy(a) ans = 0 for k in range(3): ptn = get_ptn(ta) cost = [] tmp = [] for i in range(len(ptn)): tmp.append([abs(take[k] - sum(j)) for j in ptn[i]]) cost.append(min(tmp[i]) + 10 * i) ans += min(cost) ac = np.argmin(cost) at = np.argmin(tmp[ac]) for _ in ptn[ac][at]: ta.remove(_) ansl.append(ans) except: pass print(min(ansl))