振り返りです。
AtCoder Beginner Contest 265 - AtCoder
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
from copy import deepcopy
def test_all(f):
for i, data in enumerate(eval(f'test_data{f.__name__[0]}')):
exp = data["out"]
ans = f(*deepcopy(data["in"]))
result = "AC" if exp == ans else "WA"
print(f"{i+1} {result}: expected: {exp}, output: {ans}")
略
B - Explore
B - Explore
やってみよう!
B
関数を完成させて「Run」ボタンをクリックしよう!
test_dataB = [
{
"in":[4, 1, 10, [5, 7, 5], [[2, 10]]],
"out": "Yes"
},{
"in":[4, 1, 10, [10, 7, 5], [[2, 10]]],
"out": "No"
},
]
def B(N, M, T, A, XY):
pass
test_all(B)
自由欄
try
インデックスの持ち方と判定のタイミングに気を遣う問題です。
def B(N, M, T, A, XY):
B = [0] * len(A)
for x, y in XY:
B[x - 1] = -y
for a, b in zip(A, B):
T -= b
T -= a
if T <= 0: return "no" "yes"< py-cell>
test_all(B)
結果:提出 #34212608
自由欄
C - Belt Conveyor
C - Belt Conveyor
やってみよう!
C
関数を完成させて「Run」ボタンをクリックしよう!
test_dataC = [
{
"in":[2, 3, [['R', 'D', 'U'], ['L', 'R', 'U']]],
"out": [1, 3]
},{
"in":[2, 3, [['R', 'R', 'D'], ['U', 'L', 'L']]],
"out": [-1]
},{
"in":[9, 44, [['R', 'R', 'D', 'D', 'D', 'D', 'R', 'R', 'R', 'D', 'D', 'D', 'R', 'R', 'R', 'R', 'R', 'R', 'D', 'D', 'D', 'R', 'D', 'D', 'D', 'D', 'R', 'D', 'D', 'R', 'D', 'D', 'D', 'D', 'D', 'D', 'R', 'R', 'D', 'R', 'R', 'R', 'R', 'R'], ['R', 'R', 'R', 'D', 'L', 'R', 'D', 'R', 'D', 'L', 'L', 'L', 'L', 'R', 'D', 'R', 'R', 'L', 'L', 'L', 'D', 'D', 'R', 'D', 'L', 'L', 'L', 'R', 'D', 'D', 'D', 'L', 'L', 'L', 'D', 'R', 'R', 'L', 'L', 'L', 'L', 'L', 'D', 'D'], ['D', 'R', 'D', 'L', 'R', 'L', 'D', 'R', 'D', 'L', 'R', 'D', 'R', 'L', 'D', 'R', 'L', 'R', 'D', 'D', 'L', 'D', 'D', 'L', 'R', 'D', 'R', 'L', 'D', 'R', 'L', 'D', 'D', 'R', 'L', 'R', 'R', 'L', 'R', 'R', 'R', 'D', 'R', 'R'], ['D', 'D', 'L', 'R', 'R', 'D', 'L', 'D', 'D', 'L', 'D', 'D', 'R', 'L', 'D', 'D', 'L', 'D', 'R', 'D', 'D', 'R', 'D', 'D', 'D', 'D', 'R', 'L', 'R', 'R', 'L', 'R', 'D', 'D', 'R', 'R', 'R', 'L', 'D', 'R', 'D', 'R', 'D', 'D'], ['R', 'D', 'L', 'R', 'R', 'D', 'L', 'R', 'D', 'L', 'L', 'L', 'L', 'R', 'R', 'D', 'L', 'R', 'D', 'R', 'R', 'D', 'R', 'R', 'R', 'D', 'L', 'R', 'D', 'D', 'L', 'L', 'L', 'L', 'D', 'D', 'D', 'L', 'L', 'L', 'L', 'R', 'D', 'R'], ['R', 'D', 'L', 'L', 'L', 'L', 'L', 'R', 'D', 'L', 'R', 'D', 'R', 'L', 'D', 'D', 'L', 'D', 'D', 'R', 'D', 'R', 'R', 'D', 'R', 'L', 'D', 'R', 'R', 'R', 'L', 'D', 'D', 'D', 'L', 'D', 'D', 'D', 'R', 'D', 'D', 'L', 'D', 'R'], ['R', 'D', 'L', 'R', 'R', 'D', 'L', 'D', 'D', 'L', 'R', 'D', 'R', 'L', 'R', 'D', 'L', 'D', 'D', 'D', 'L', 'D', 'D', 'R', 'L', 'D', 'R', 'D', 'R', 'D', 'L', 'D', 'R', 'D', 'L', 'D', 'D', 'L', 'R', 'R', 'D', 'L', 'R', 'R'], ['R', 'D', 'L', 'D', 'R', 'R', 'L', 'D', 'R', 'L', 'L', 'L', 'L', 'D', 'R', 'D', 'R', 'L', 'L', 'L', 'R', 'D', 'D', 'L', 'L', 'L', 'L', 'L', 'R', 'D', 'R', 'L', 'L', 'L', 'R', 'R', 'R', 'R', 'L', 'L', 'L', 'D', 'D', 'R'], ['R', 'R', 'R', 'R', 'D', 'R', 'D', 'D', 'R', 'R', 'R', 'D', 'D', 'R', 'D', 'D', 'D', 'R', 'R', 'R', 'D', 'R', 'D', 'R', 'D', 'R', 'D', 'R', 'R', 'R', 'R', 'R', 'R', 'D', 'D', 'D', 'R', 'D', 'D', 'D', 'D', 'R', 'R', 'R']]],
"out": [9, 5]
},
]
def C(H, W, G):
pass
test_all(C)
自由欄
try
def C(H, W, G):
move = {
"U":lambda h, w: [h-1, w] if h != 0 else None,
"D":lambda h, w: [h+1, w] if h != H-1 else None,
"L":lambda h, w: [h, w-1] if w != 0 else None,
"R":lambda h, w: [h, w+1] if w != W-1 else None,
0:lambda h, w: -1
}
h = 0
w = 0
while True:
nex = move[G[h][w]](h, w)
if nex == -1: return [nex]
if nex is None: break
G[h][w] = 0
h, w = nex
return [h+1, w+1]
test_all(C)
結果:提出 #34226831
自由欄
D - Iroha and Haiku (New ABC Edition)
D - Iroha and Haiku (New ABC Edition)
やってみよう!
D
関数を完成させて「Run」ボタンをクリックしよう!
test_dataD = [
{
"in":[10, 5, 7, 5, [1, 3, 2, 2, 2, 3, 1, 4, 3, 2]],
"out": "Yes"
},{
"in":[10, 5, 7, 5, [2, 1, 2, 2, 2, 3, 1, 2, 1, 1]],
"out": "Yes"
},{
"in":[9, 100, 101, 100, [31, 41, 59, 26, 53, 58, 97, 93, 23]],
"out": "No"
},{
"in":[7, 1, 1, 1, [1, 1, 1, 1, 1, 1, 1]],
"out": "Yes"
},
]
def D(N, P, Q, R, A):
pass
test_all(D)
自由欄
try
解説 の通り、累積和と二分探索の組み合わせ。
ちなみに解説の「実装上は S をsetで保持することで、明示的に二分探索を行う必要がなくなります」は、Pythonには当てはまらなさそうです。
from itertools import accumulate
from bisect import bisect
def D(N, P, Q, R, A):
*acc, = accumulate([0] + A)
for i in range(N):
s = i
for total in [P, Q, R]:
idx = bisect(acc, total + acc[s])
if idx <= len(acc) and acc[idx-1]="=" total + acc[s]: s="idx-1" else: break return "yes" "no"< py-cell>
test_all(D)
結果:提出 #35084803
自由欄
自由欄