今日解いた競プロの問題。
競プロ典型90問
030 K Factors: 1~Nまで全て素因数分解すれば
こんなごり押し解法はまず想定解ではないだろうなと思ったので別のやり方も考えた。まずエラトステネスの篩でN以下の素数を全列挙。
想定解はもっときれいだった。問題としているのはそれぞれの数が何種類の素因数を持っているかなので、c[2], c[4], c[6]…に1を足す、c[3], c[6], c[9]…に1を足す、c[5], c[10], c[15]…に1を足す、という風にエラトステネスの篩のようなやり方で数えていくというやり方だった。頭が良すぎる。エラトステネスの篩と同じ遷移なので計算量は
017 Crossing Segments 難易度☆7だが自力で解けた。うれしい!
まず全組み合わせを調べて
次に、「区間を条件に数えている」あたりが高速化できそうに見えたので高速化した。
まずそれぞれの点について辺情報を持っておく。(例えばgという2次元配列を持っておき、(L,R)=(3,5)という線分があったらg[3].push_back(5), g[5].push_back(3)としておく。)
そして
最後、「区間内の全ての点について数えている」あたりが高速化できそうに見えたので高速化した。
考察のためにLとRを二次元平面にプロットしてみたら、各辺についてある矩形領域の中の点を数えればいいことが一瞬で分かってしまった。こういう場合は平面走査法をすれば通る。適宜ソートして区間の点の数の管理にBITを使えば
気持ちよかった~。
なんかすごそうなのでメモ。Chromiumのアーキテクチャの解説を東大講義かなんかでやってたらしい。
斎藤環「ひきこもりはなぜ『治る』のか?」読了。
- 義務と欲望の区別がつかない状態だと身動きがとれなくなる、というのはかなり心当たりがある話だと思った。しかしここで言う「義務」の正体が今一つ掴めなくて消化不良。
- 他者との対話をするにあたり、メールや電話ではダメで直接会って話をするのでないといけない、というのをかなり念押ししていたのが気になった。それなり説明もしていたが今一つピンと来ず。思うに、「勘ぐり」が発生するようなコミュニケーションではいけないのだという話と解釈した。
- 「他者との対話」の必須性を理論的な面から説明してくれたのがかなり良かった。
昼にチャーハンを作った。チャーハンを作るのにちょっとずつ慣れてきている。
腕立て伏せをやった。明日は腹筋。
Categories: 未分類