振り返りです。

import sys from io import StringIO input = lambda: sys.stdin.readline()[:-1] def test(f, data): stdin = sys.stdin stdout = sys.stdout sys.stdin = StringIO(data["in"]) out = StringIO() sys.stdout = out err = None try: f() except BaseException as e: err = e else: ans = out.getvalue() exp = data["out"] sys.stdin = stdin sys.stdout = stdout if err: raise err result = "AC" if exp == ans else "WA" print(f"{result}: expected: {exp}, output: {ans}") def test_all(f): for i, data in enumerate(eval(f'test_data{f.__name__[0]}'), 1): print(f"case {i}") test(f, data)

B - Fill the Gaps

やってみよう!

B関数を完成させて「Run」ボタンをクリックしよう!

test_dataB = [ { "in":"""4 2 5 1 2 """, "out": """2 3 4 5 4 3 2 1 2 """ },{ "in":"""6 3 4 5 6 5 4 """, "out": """3 4 5 6 5 4 """ }, ] def B(): pass test_all(B)

自由欄

コンテスト中

こんな感じ。

def B(): N = int(input()) (*A,) = map(int, input().split()) print(A[0], end=" ") for i, a in enumerate(A[1:]): if abs(a - A[i]) > 1: if a > A[i]: print(*range(A[i] + 1, a), end=" ") else: print(*range(A[i] - 1, a, -1), end=" ") print(a, end=" ") test_all(B) # 末尾の無駄なスペースがある & 改行がないのでここではWAですがAtcoder上ではAC判定になります

結果:#41357753

自由欄

振り返り

こんな感じ。
Booleanでうまいこと±1だけとれないかなぁとやってみた。

def B(): N = int(input()) (*A,) = map(int, input().split()) now = A[0] print(now, end="") for a in A[1:]: while now != a: now += (a > now) * 2 - 1 print("", now, end="") print() test_all(B)

結果:#42306898

自由欄

C - AtCoder Cards

やってみよう!

C関数を完成させて「Run」ボタンをクリックしよう!

test_dataC = [ { "in":"""ch@ku@ai choku@@i """, "out": """Yes """ },{ "in":"""ch@kud@i akidu@ho """, "out": """Yes """ },{ "in":"""aoki @ok@ """, "out": """No """ },{ "in":"""aa bb """, "out": """No """ }, ] def C(): pass test_all(C)

自由欄

振り返り

結果、コンテスト中のAC提出とほとんど同じ(ちょっとスッキリ)になりました。

def C(): from collections import defaultdict from string import ascii_lowercase as abc S = input() T = input() s_chars = defaultdict(int) t_chars = defaultdict(int) for s, t in zip(S, T): s_chars[s] += 1 t_chars[t] += 1 for char in abc: s = s_chars[char] t = t_chars[char] if char in "atcoder": if s > t: t_chars["@"] -= s - t elif t > s: s_chars["@"] -= t - s else: if s != t: print("No") return print("Yes" if t_chars["@"] >= 0 and s_chars["@"] >= 0 else "No") test_all(C)

結果:#42307631

自由欄

D - Bitmask

やってみよう!

D関数を完成させて「Run」ボタンをクリックしよう!

test_dataD = [ { "in":"""?0? 2 """, "out": """1 """ },{ "in":"""101 4 """, "out": """-1 """ },{ "in":"""?0? 1000000000000000000 """, "out": """5 """ }, ] def D(): pass test_all(D)

自由欄

振り返り

コンテスト中は「よく分かんねぇ~」と思ってソッコーで諦めましたが、今振り返ってみるとフツーに解けました。
前々回ぐらいから、惰性で参加してたのがよく分かる・・・😇

def D(): S = input()[::-1] N = int(input()) ex2 = {0: 1} now = 0 for i in range(len(S)): if S[i] == "1": now += ex2[i] ex2[i + 1] = ex2[i] * 2 if now > N: print(-1) return elif now == N: print(N) return for i in range(len(S) - 1, -1, -1): if S[i] == "?" and ex2[i] + now <= N: now += ex2[i] print(now) test_all(D)

結果:

自由欄

E - Pac-Takahashi

さっそく解説を見ます。
巡回セールスマン問題。。「アルゴリズム」の話題でよく出てくるので名前だけは知ってますが、急に実装しろとなると困る😫

という訳でもっと元気なときの宿題とします。

自由欄