初めに
あー雪降ってる。
いよいよ冬だな
明日は-4度寒い(おい 二次予選当日だからって、現実逃避するな)
あーあwebの情報をもうちょっと、ちゃんと見てたら4完したんだけどなー
結果としては、aは瞬殺
bは実装に戸惑いつつも12分ぐらいでAC
cはJOIの過去問に部分問題として同じようなのが出てきたので、それを使ってacしました
dはまあネットの情報を見落としてacできませんでした。(あのアホミス集の記事フラグだったか)
さて本題
使っているライブラリ
前回同様まだahcが開催中のため、更新していません
github
あと今回あまり問題文を要約するところがないため、要約はしません。
A問題
普通に現在の時間と、水量を取っておいて
各動作ごとに、たった時間を水量から引けばOK
acコード(ライブラリ抜粋)
# コード
N = ii()
L = li(N, il)
current = 0
w = 0
for t, v in L:
w = max(0, w - abs(t - current))
w += v
current = t
print(w)
B問題
全探索して解いた
具体的には、加湿されているマスのbool状態を取っておけばいいためフラグ変数を置く
そしてiとjを全探索して条件を満たすマスを探します。条件を満たしているマスはboolをtrueにします
そうすればあとは立っているフラグの最大値を求めればいいです(言語化能力低すぎだろ)
acコード(ライブラリ抜粋)
クソコードですいません
H, W, D = il()
S = li(H, s)
ans = 0
for ai in range(H):
for ak in range(W):
for bi in range(H):
for bk in range(W):
if ai == bi and ak == bk:
continue
if S[ai][ak] == "#" or S[bi][bk] == "#":
continue
used = [[False] * W for _ in [0] * H]
used[ai][ak] = True
used[bi][bk] = True
for i in range(H):
for k in range(W):
if abs(ai - i) + abs(ak - k) <= D and S[i][k] == ".":
used[i][k] = True
for i in range(H):
for k in range(W):
if abs(bi - i) + abs(bk - k) <= D and S[i][k] == ".":
used[i][k] = True
ans = max(ans, sum([l.count(True) for l in used]))
print(ans)
C問題
この問題、JOIの過去問のゾンビ島に出てくる 部分問題と同じだと、確信して実装したらACした
具体的には、キューにマスの状態と加湿器から何マス目かという情報を入れてbfsすればいいです
であとは通ったマスのカウントの数を出力すればOKです
b問題を提出してから7分ぐらいでacしました
acコード(ライブラリ抜粋)
MOVES = [(1, 0), (-1, 0), (0, 1), (0, -1)]
H, W, D = il()
S = li(H, s)
used = [[False] * W for _ in [0] * H]
Q = deque()
for i in range(H):
for k in range(W):
if S[i][k] == "H":
used[i][k] = True
Q.append((i, k, 0))
while Q:
x, y, t = Q.popleft()
if t >= D:
continue
for mx, my in MOVES:
nx, ny = mx + x, my + y
if not (0 <= nx < H and 0 <= ny < W):
continue
if S[nx][ny] != ".":
continue
if used[nx][ny]:
continue
Q.append((nx, ny, t + 1))
used[nx][ny] = True
print(sum([l.count(True) for l in used]))
D問題
色々調べたながれ、約数を9個持つ数とググる。
調べてみると知恵袋に大量にある、えーと2つの素数($p<q$を満たしている)をどちらも2乗して、それをかけた数が$N$以下だったら条件を満たすのかー
エラトステネスの篩で$\sqrt N$以下の素数を列挙して、二分探索使えばいいじゃないかと思い、書いてテストするとACできないなんでだろう。
えーとミスりました$p^8$が$N$以下も条件を満たすのです。
それを書き忘れたからもちろんACできません
後で解説見たら調べたyoutubeで、そんなこと言ってたなと思いました
それで4完の絶好の機会を逃しました
終わり
いつもより内容スカスカで、すいません
JOI二次予選頑張ります
レートは30上がって、緑まで、残り110です。
追記:この記事を書き終わった頃には雪はやみました(しょうもな)
以上