解いたARCの問題の紹介.
これも長くなるので,続きから
ARC 011 B
問題
B: ルイス・キャロルの記憶術 - AtCoder Regular Contest #011 | AtCoder
回答
Submission #399356 - AtCoder Regular Contest #011 | AtCoder
文字と対応する数値をDictionaryを使って対応させていく感じでしょうか.
Dictionaryの中にないとエラーになるし,大文字小文字の処理もしないといけないので,細かい点で配慮が必要でした.
あとドット,こいつも厄介でした.
_ = int(input()) dic = {"b":1, "c":1, "d":2, "w":2, "t":3, "j":3, "f":4, "q":4, "l":5, "v":5, "s":6, "x":6, "p":7, "m":7, "h":8, "k":8, "n":9, "g":9, "z":0, "r":0} res = [] for s in input().split(): resst = "" for c in s: if c.isalpha(): c = c.lower() if c in dic: resst += str(dic[c]) if not resst == "": res.append(resst) print(" ".join(res) if len(res) > 0 else "")
ARC 013 B
問題
B: 引越しできるかな? - AtCoder Regular Contest #013 | AtCoder
回答
Submission #399361 - AtCoder Regular Contest #013 | AtCoder
一つ一つの列は降順にならべて,各インデックスの最大の値を探す感じですかね…
10 20 30 20 20 20 30 20 10
ならば,こう置き換えて,
30 20 10 20 20 20 30 20 10
で,max(30, 20, 30) * max(20, 20, 20) * max(10, 20, 10) = 30 * 20 * 20 = 12000 って求められる感じですね.
プログラムの最後が非常にダサいので,改善したいと思ったけどいい案が思いつかないですね….
それと立体,立体というイメージで難しい感じがしましたが,扱っているのがただの数字データだと気がつくと楽でした.
N = int(input()) table = [list(map(int, input().split())) for _ in range(N)] maxbox = [0, 0, 0] for elem in table: elem.sort(reverse=True) for i in range(3): maxbox[i] = max(maxbox[i], elem[i]) print(maxbox[0] * maxbox[1] * maxbox[2])
ARC 008 B
問題
B: 謎のたこ焼きおじさん - AtCoder Regular Contest #008 | AtCoder
回答
Submission #399344 - AtCoder Regular Contest #008 | AtCoder
これもDictionaryを上手く使ってやるパターンかなあ.
足りなくなったところは,Dictionaryの値を増やして~みたいな形で.
zip関数の使い方を勘違いしていたことと,dict関数の仕様を勘違いしていたので,ばかみたいに時間がかかりました… 要復習です.
N, M = map(int, input().split()) name = list(input()) kit = list(input()) count = 0 dic = dict(zip(kit, [0 for _ in range(len(kit))])) for c in name: if not c in kit: print(-1) break else: dic[c] -= 1 if dic[c] < 0: count += 1 for ch in kit: dic[ch] += 1 else: print(count)
ARC 026 B
問題
B: 完全数 - AtCoder Regular Contest 026 | AtCoder
回答
Submission #399391 - AtCoder Regular Contest 026 | AtCoder
N=1の場合の処理がうまくいかないことが多く,大変でした.
あと割り切れる時のペア見つけるような処理とかね.(36の時に,2のペアは18みたいな…事が言いたい)
from math import sqrt N = int(input()) res = 0 for i in range(1, int(sqrt(N)) + 1): if N % i == 0: res += i if N == i * i or i == 1 else i + N // i print("Deficient" if N > res or N == 1 else "Abundant" if N < res else "Perfect")
第二弾終わり!!