💨
[python]ABC183 個人的メモ[AtCoder]
ABC183
所感
abcd4完
緑に復帰した
やったぜ
A - ReLU
ReLU=活性化関数
https://ja.wikipedia.org/wiki/活性化関数
#!/usr/bin/env python3
x = int(input())
print(max(0, x))
B - Billiards
始点のx軸に対して線対称な位置の点から終点に向けて線を引けばおk
#!/usr/bin/env python3
sx, sy, gx, gy = map(int, input().split())
print(sx - (sx - gx) / (sy + gy) * sy)
C - Travel
全探索
すべてのパターンが
ただし,最初と最後が都市1なことに注意
#!/usr/bin/env python3
from itertools import permutations
N, K = map(int, input().split())
T = [list(map(int, input().split())) for _ in range(N)]
ans = 0
for order in permutations(range(1, N)):
now = 0
res = 0
for i in order:
res += T[now][i]
now = i
res += T[now][0]
if res == K:
ans += 1
print(ans)
D - Water Heater
いもす法
https://imoz.jp/algorithms/imos_method.html
#!/usr/bin/env python3
from itertools import accumulate
N, W = map(int, input().split())
time_max = 3 * 10 ** 5
lst = [0] * (time_max)
for _ in range(N):
s, t, p = map(int, input().split())
lst[s] += p
lst[t] -= p
lst = list(accumulate(lst))
if max(lst) <= W:
print("Yes")
else:
print("No")
E - Queen on Grid
あるマスの場合の数は漸化式で示せるからdp
各マスごとで連続している縦横斜め方向のマスの場合の数を計算するとTLEするから,それぞれの方向に累積和を持っておく
壁マスは何もせず飛ばせばおk
#!/usr/bin/env python3
H, W = map(int, input().split())
S = [input() for _ in range(H)]
MOD = 10 ** 9 + 7
dp = [[0] * W for _ in range(H)]
dp[0][0] = 1
row_cumsum = [[0] * (W + 1) for _ in range(H + 1)]
line_cumsum = [[0] * (W + 1) for _ in range(H + 1)]
slant_cumsum = [[0] * (W + 1) for _ in range(H + 1)]
for i in range(H):
for j in range(W):
if S[i][j] == "#":
continue
dp[i][j] += (row_cumsum[i][j - 1]
+ line_cumsum[i - 1][j]
+ slant_cumsum[i - 1][j - 1])
dp[i][j] %= MOD
row_cumsum[i][j] = dp[i][j] + row_cumsum[i][j - 1]
row_cumsum[i][j] %= MOD
line_cumsum[i][j] = dp[i][j] + line_cumsum[i - 1][j]
line_cumsum[i][j] %= MOD
slant_cumsum[i][j] = dp[i][j] + slant_cumsum[i - 1][j - 1]
slant_cumsum[i][j] %= MOD
print(dp[-1][-1])
参考
- 【Python】ABC183 解説
https://marco-note.net/abc-183-work-log/
Discussion