ABC460 (2026/05/30)
〇A問題
まーす.icon 操作ごとに$ Mの値を更新.$ Nが$ Mで割り切れた時点で打ち切り.
まーす.icon 初3桁&初青パフォでし.おしい.あと11.
Kaplam.iconそこからが長いのよ( ˘ω˘)
まーす.icon あと久しぶりの5完なのでうれしい.
CarpDay.icon 私の過去最高1191.あと9.もうずいぶん前...
まーす.icon これからが怖い((((;゚Д゚))))ガクガクブルブル
Kaplam.icon事故!!!
CarpDay.icon お久しぶりの参加.無難にUnrated.コンテスト直後にVSCodeのショートカットでサンプルデータを読み込んで...あれ?読み込んだデータどこ?あれ? とやっている間に時間が経つ.B問題終わってからA問題解きました.
N_N.icon 言われた通り書いた.
〇B問題
Kaplam.icon覆うか交わるか判定、入出力関数が壊れててそれの確認で1WA
Kaplam.iconこれ試さずに実戦投入したわけじゃなくてちゃんと動作確認した上だったんだけど、sys.stdin.buffer.read が自作のテスト高速化機構と競合起こしてるっぽい
Kaplam.iconsys.stdin.readlinesでちゃんと動いたし...ICPC前に調整しないとねぇ
Kaplam.iconinput()とbufferが想定していない所で混合使用されていたのが原因っぽい
Kaplam.icon思ったより工数が必要だったけど無事完治! ICPC前に弄ってAtCoderでの試運転しないの怖いしそろそろstable版としてまとめとこ
まーす.icon 同上.最初,「2つの円周が交わる部分が存在するか」ではなく,「2つの円の内部の共通部分が存在するか」と読み間違えをしていた.
CarpDay.icon 平方根で実数になったときの計算誤差が怖くて整数のまま扱う(それが原因でコード読みにくくて自分で何しているのか分からなくなる).一方が他方に含まれるときの条件を早とちりして時間を使う.
N_N.icon すべて2乗した値同士で比較する.一方の円が他方に完全に含まれる場合が少しめんどくさい.
〇C問題
Kaplam.icon軽いしゃりから出来るだけ重くとれるねたをとる
CarpDay.icon 重いネタから順に載せられるシャリを確認.そういえば,お餅の問題あったね.
N_N.icon シャリとネタを小さい順でソートし,尺取り法で解いた.
〇D問題
Kaplam.icon周囲を更新出来ない#が存在した場合だけ特殊ケースになるけれど、これは初回の盤面にしか発生しないので2手動かしてから処理する 、途中で書き方変えた時に前の方針のかけらが残っててWA、原因が全然わからずランダムテスト回してうんぬんかんぬんで大分時間とられた
まーす.icon 私は,「初手動かす」のを1回だけでやりました.
Kaplam.icon最初にサンプル2で落ちて気付いたので、mod 2をずらすのが億劫で2手にした
まーす.icon 発想の転換が必要.「.」と「#」は偶奇で入れ替わるが,「#」であってまわりが「#」となる場合の処理の考察がしんどい.ただ,気が付けば証明は自明レベル.
CarpDay.icon サンプル2がレアケースだろう,と特別扱いしたのが間違い.WAの原因が分からなかったけど,サンプル2を一般化して原因が分かる.
CarpDay.icon https://scrapbox.io/files/6a1aefcc65e24daf8cc3eb27.pngWA原因分からなかったとき,Excelでハンドシミュレートしました.
N_N.icon これは途中で盤面がループするな,しかも2回操作すると盤面が元に戻るループだなとは気付いたんだけど,たぶん停止条件を間違えている.(停止が早すぎたよう.)
N_N.icon 停止条件を変えたらWAは取れたけど,TLE.やはり,BFSなどの探索を使わないといけないらしい.
〇E問題
Kaplam.icon9,99...に対して処理すればいいのはわかったけど、一発逆転でF見てて時間なかった
まーす.icon 本質的なことは$ yはなんでもいいということ.$ \operatorname{mod}関係でやらかして,3つめのケースが全然通らず,90分にAC.もう少しやれたか......
CarpDay.icon やったね!3桁順位!むっちゃランク上がるか!?
まーす.icon (^ ^) b
まーす.icon これ書いているときに,当時書いていたコードが間違えである理由が判明した.(めでたしめでたし)
CarpDay.icon 時間なくてコード組めなかったけど,方針は立てた.例えばy が3桁だったら,1000x + y = x + y (mod M)より 999x = 0 (mod M) . 1≦x≦Nより,999≦x≦999Nの範囲内のMの倍数を割り算して求める.あとは,各桁のyが1≦y≦Nの範囲にいくつ存在するか数えればOK,という感じかなぁ?
〇F問題
Kaplam.iconわかんない、次数のmaxが小さかったらheapでなんとかなりそうなんだけど
Kaplam.icon上のqiitaのページも昔踏んだことがあるらしいリンクの色になっていましたが記憶にございませんでした!!
CarpDay.icon 上のページを書いた本人も記憶にございません!
〇G問題