デバッグに失敗した,ないし,長時間かかった間違いの記録

ABC212E Safety Journey

問題へのリンク

2023/07/05 あさかつ

無向グラフが,完全グラフからM本の辺を除いたものとして与えられている. 除く辺は $(u, v)$ の形で与えられている. dp[i][j] = (i 回の繰返し後,頂点 j に到達できる方法の数) という DP で, 全体から 除いた辺の分を引く. $(u, v)$ と $(v, u)$ の両方を引かなければならないところ, $(u, v)$ しか引かなかった.

ABC279F BOX

2023/07/05 あさかつ

タイプミス

正:

if (rx == -1 and ry == -1) {

誤:

if (rx == -1 and ry == 1) {

ARC164B

2023/07/09 コンテスト

誤読.

  • 正: 木の好きな頂点を選んで出発できる
  • 誤: 木の根から出発する

ABC222E Red and Blue Tree

2023/08/02 あさかつ

宣言を間違えた.

正:

vector A(M, Fp(0));

誤:

vector<ll> A(M, Fp(0));

ABC318C Blue Spring

  • 「周遊セット」を買う枚数 $x$ を全探索する問題.
  • ちゃんと考えると,買う枚数の候補は $0$ 枚以上 $\displaystyle\left\lceil \frac{N}{D} \right\rceil$ 枚以下,とわかる.
  • コンテスト中で焦っていたので,面倒だから $0$ 枚以上 $N$ 枚以下で いいや,と考えた.($N$は十分小さいのでこれでも間に合う)
  • ところが,それを REP(x, 0, N) とコーディングしてしまった. もちろん,REP(x, 0, N + 1) でなければならない.

ARC167B Product of Divisors

A が整数であって,$ k \leq A / 2$ を満たす整数 k の最大値を求めよ, という形になった.当然,A の偶奇で場合分けが必要なのだが, A が偶数と思い込んでしまった.

ABC237E Maximize Rating

DP表を埋めるとき,本来は,あり得ないところ (スタート地点から遷移してこないところ) は,マークしておいて計算しないようにすべき. それをサボって,適当な計算をしてしまっていた.

ABC334F Christmas Present 2

[後記: その後遅延セグメント木の1点代入をサポートしたから,今なら大丈夫なはず]

遅延セグメント木で,query の演算は double の最小値で, 作用の演算として,区間加算と1点代入をやりたかった. 遅延セグメント木の OP としては加算にしておいて, p を代入したいところでは,query で値 v を取ってきて -v + p を加算すればよい, と思ってコードを書いた.

最小値演算の単位元は 1e18 とかしておいた. ところが,query でとってくる値がその 1e18 付近の値 (もっと大きいこともあった) になっていて,ぐちゃぐちゃになった.

対処として,格納する値は 1e15 くらいにして通すことはできたが,あまり良くない. 加算と代入の両方ができるように OP を定義すべきであった.相手が最小値だから, 両方無理なく定義できる.

なお,問題としては,実はセグメント木は不要だった.

ABC267E Erasing Vertices 2

二分探索の下端の誤り.条件を満たす $A_i$ たちの和の最大値を最小化する問題. 各 $i$ について $A_i \geq 1$ だったので,探索下端を $1$ としてしまった, 「条件を満たす $A_i$ 」というのが一つも無くて,和が $0$ になるケースで失敗した.

二分探索の上端の誤りも良くある.

Codeforces Round 972 (Div.2) C Lazy Narek

DP table を -1 で初期化して,値が負の時には,そこにくるパスはないからスキップするといういつものパターンを使った. ところが,この問題では,途中の値が負になり得るのだった. 初期化を -1e18 などで行う必要があった.

keywords: 愚かな, 間違い, 誤り,