/ 最近 .rdf 追記 編集 設定 本棚

脳log[20250621]



2025年06月21日 (土) [AtCoder] 今日はユニークビジョンプログラミングコンテスト2025 夏(ABC411)があった。F は解けても良さそうな気がするなー。■A 問題 Required Length。はい。■B 問題 Distance Table。累積和でやったけどその必要もない制約だった。というかね、累積和を作成するのと答えを出力するのが同時に行えるのだから、事前に累積和を作成するひと手間が完全に無駄だったよね。■C 問題 Black Intervals。左右の端に番兵(白石)を置くと境界条件が省けて便利。前後を合わせて石3つで3ビット(8通り)の場合分けを書いて1通りだけ間違えて1ペナルティ。私は具体例を出して数の増減が数えられません。■D 問題 Conflict 2。配点がやや上振れ。だけどひょっとして Ruby だとやるだけなのでは? と思って提出してまんまと TLE を食らいました (#66944990)。Array だと前後への要素の追加(unshift/push)でサイズが倍々的に増えていくからメモリの確保回数が節約できるのだけど、文字列の破壊的変更はそうではないのだろうか。Array には copy on write もあるけど文字列にはないのだろうか。それともそうであっても許されない制約だったのだろうか。前の要素を参照するリンクリスト的な構造を Q 個作成して、最後に逆順にたどって連結した。クエリを逆順に見て最終的に影響のあるクエリ2だけをピックアップできるかなとも一瞬考えたけど、一瞬で断念した。■E 問題 E [max]。最初しばらく勘違いしていたんだけど、余事象とか包含関係を求めやすさで整理した結果、答えを出すのに必要なものは、有効な面が0~6面のダイスがそれぞれ何個ずつあるかという集計。有効な面とは何か。たとえば最大値を X としたいとき、その確率は X 以下の面のみが出る確率引く X 未満の面のみが出る確率。最大値を大きい数から順に下げていくのにあわせて有効な面を減らしていき、その都度確率を計算する。期待値は最大値掛ける確率。答えが合わないので一度小数で計算して過程を表示するなどした。掛けるで繋げるべき計算を足すで繋いでいたのが原因で間違えていた。mod のままではそういうしょうもない計算ミスを見つけるのも難しい。2.5 秒かかったので制限時間が3秒で助かった。÷6^N をループの外に出してこれなので、もし2秒制限で TLE だったら、2,3,(4),5,(6) の N 乗までを前計算したりしたかな。あと、前後のループの後半と前半で確率の値が使い回しできそう。……ということは、ループ全体で足し引きを通算して再構成するともっと演算が減りそう。考察が足りなくて最適解が見えていない可能性。■F 問題 Contraction。制限時間が4秒。やや高の 525 点。辺をマージするだけなのかなと素朴すぎる方針を立てて実装したところ、およそ1秒で時間は間に合ったけど WA が多数 (#66981976)。必要な処理を抜かして時間を稼いでいる疑い。■■■F 問題。終了 12 分後に提出したものは WA×31 だった (さっきの提出)。翌朝目覚めたらデバッグが完了していた (#66988575)。頂点 a と b をマージして a が代表として残るとき、b とのみ辺で繋がっている頂点 c を a に付け替える。そのときに辺を a と c 双方に登録しなければいけないところ、a から生やす辺を忘れていた (30 行目)。やっぱり時間内(E 問題に 40 分かけたがまだ 30 分と少し残っていた)に解けてほしい難易度の問題だったけど、実際にはひと晩(≠ひと晩中)かかったなあ。解答に使った知識は UnionFind とマージテク。■今日ある第六回日本最強プログラマー学生選手権-予選-(ARC201)には参加しません。最初の2問が 500 点だけど、どう考えてもはりきった出題者が一筋縄ではいかないひねった問題骨太な問題を出してくるに決まってるんです。先週の ARC200 (div.2) の A 問題 (500 点) が解けなくてゼロ完だったことで私はいたく傷ついています。■■■D 問題。Array でやってもだめだった (TLE×13)。ちなみに String だと TLE×12 だったから、Array よりマシ。そして、クエリ逆読みをやってみたら WA×18 だった。「一瞬で断念した」だけのことはある。デバッグ完了 (AC)。それから最初の解法だけど、リンクリストのノードは Q 個ではなくクエリ2の数だけで十分みたいだった。クエリ1と3でコピーしなければいけない気がして自分は空文字列を追加した体で新しいノードを作ったんだけど、一度作ったノードは不変なのだから、参照をコピーしてノードを共有するやり方で問題なかった。