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

脳log[20241109]



2024年11月09日 (土) [AtCoder] 今日はトヨタ自動車プログラミングコンテスト2024#11(AtCoder Beginner Contest 379)があった。いい日ではあったがそれはつまり6問目まで解ける問題が並んでいたということであり、えっと、退屈な問題セットだったということなのでは? 退屈な問題しか解けないのが私です。■A 問題「Cyclic」。標準入出力が扱えますかという問題。AtCoder 初参加の時は知らなかったからリファレンスを引いた。■B 問題「Strawberries」。前から貪欲に。■C 問題「Sowing Stones」。難しい。N 個のマスを順番に処理することができないのが難しい。石の入ったマスに着目して計算で石を配らないといけない。計算というのは等差数列の和。N マス全部を埋めなければいけなくて、石は右にしか配れないから、右の方にある石の山から順番に、現在右から何マス目まで石で埋まっているかを記録していった。右から隙間なく敷き詰めていくことしかできないからね。これを左側から処理しようとすると、いろいろと保留するものが出て来てややこしいと思った。13 分かけて書いた最初の提出が WA だった。問題文を読み直したら「ちょうど」って書いてある(「N 個のマスすべてに石がちょうど 1 個ずつ入っている」)。石が余る場合に間違えていた。修正に5分。N マスすべてに石が配れるかは確認済みなので、石の総数が N であることをチェックするだけ。ペナルティ込みで 23 分かけた計算。難しいよー。■D 問題「Home Garden」。一転して簡単な問題。配列(生配列とポインタペアで十分)に植えた日を記録していく。収穫は先頭から順番に。4分半。■E 問題「Sum of All Substrings」。かつての ABC-D 緑 diff って感じの問題。まず、余りを取る問題でないことに驚いた。えっ。64 ビットに収まるんですか? (サンプルを見て)収まらないね。1の位から考える。S の各桁の数字は1の位として何回活用されるか。10 の位、100 の位としては……。繰り上がりも考慮して決めていく。提出までおよそ 30 分。書く量は 252 バイトでもすらすらとは書けない。■F 問題「Buildings 2」。よみがえる ABC372-D「Buildings」の悪夢 (「脳みそがスポンジ化している」「番狂わせの D 問題」「提出するまでほぼ1時間ぐだぐだやっていた」「問題が全然頭に入ってこない」「いったい何を数えるんだよー」「"ビル i とビル j の間にビル j より高いビルが存在しない" という i と j のペアを数えるんだけど、えっとね、i のビルの高さはなんにも関係ないんだよ」「理解したら実装は5分」)。慎重に問題とサンプルを読んで理解に努めた。基本的には自分自身を起点とする増加列を数えておけば良さそう。自分より低いビルも見ることができるんだけど、r より低いビルを l から見ることはできないので、それは数えても意味がない。l と r の高低にかかわらず r から見える r より高いビルの数が答えの候補になる。あと考えることは、l から r が見えない場合。答えはゼロではなく、あいだにある最も高いビルから見えるそれより高いビルの数が答えになる(この条件は r が最も高いビルである場合もカバーするので場合分けが消える)。ランダム入力と愚直解法からこのケースを見つけた。ABC372-D の記憶によって数えるべきものがはっきりわかっていたから、見つけたケースの解釈で迷うことがなかった。あとは増加列を数えるのに LIS をやるポカをした。スタックを1本持って長さを数えるだけでいいのはさっき挙げた Buildings と同じはずなんだけど、なんで同じにできなかったんだろうなあ。最初の提出 #59612302 (WA) を書くのに 20 分かけて、デバッグに 20 分かけた。提出 #59621904 (AC)。■G 問題「Count Grid 3-coloring」。10 分も残っていないので問題を読むだけ。左の数字と上の数字を参照して1,2,3の場合の数を数える DP かなと思ったけど、制約が3乗を許容しているし制限時間も長めの3秒なので、何かが抜けているか全てが間違っているかのどちらか。■コンテスト成績証。青パフォ 1763。■あっ、F 問題の問題名が Buildings 2 だ! そうか、問題名で自己言及していたのか。■■■C 問題。左にある石の山から処理をしようとするといろいろ保留することになって面倒そうと書いたけど、実際には左からやった方がシンプルになった。提出 #59709275 (左から / 204 Byte)。提出 #59582960 (右から / 280 Byte)。