振り返りです。
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
関数を完成させて「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
関数を完成させて「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
関数を完成させて「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)
結果:
自由欄
さっそく解説を見ます。
巡回セールスマン問題。。「アルゴリズム」の話題でよく出てくるので名前だけは知ってますが、急に実装しろとなると困る😫
という訳でもっと元気なときの宿題とします。
自由欄