ⓂⓐⓔⓗⓐⓡⓐⓂⓐⓢⓐⓗⓘⓓⓔ

@maehrm.bsky.social

プログラミング修行中のアマグラマ(高校教員)です。C/C++, Ruby, PythonをmacOS / Linux上で自由に使いこなせるように日々勉強中! Raspberry Pi, Project Euler, AOJなどに興味を持ってます。 取得資格:ソフトウェア開発技術者,テクニカルエンジニア(ネットワーク)

ABC051-D「Candidates of No Shortest Paths」を解きました✅ 全頂点からダイクストラ法を回し、最短経路として使われた辺を記録。同じ距離のケースの扱いがなかなか思いつけないポイントでした🛣️ https://gist.github.com/maehrm/c5b5c4d4138f7b3401ede7ba28fb2ea7 #AtCoder #競技プログラミング

D - Candidates of No Shortest Paths https://atcoder.jp/contests/abc051/tasks/abc051_d

D - Candidates of No Shortest Paths https://atcoder.jp/contests/abc051/tasks/abc051_d - abc051_d.py

gist.github.com

ABC145-E「All-you-can-eat」を解きました✅ 食べる時間の昇順にソートし、「最後の一品として選ぶ」場合と「途中に組み込む」場合を分けたナップサックDP。特殊ルールをDPに組み込む発想が面白かったです🍽️ https://gist.github.com/maehrm/5300c02590d322bd3fba41088e1510f4 #AtCoder #競技プログラミング

E - All-you-can-eat https://atcoder.jp/contests/abc145/tasks/abc145_e

E - All-you-can-eat https://atcoder.jp/contests/abc145/tasks/abc145_e - abc145_e.py

gist.github.com

ABC210-D「National Railway」を解きました✅ 公式解説を参考に解きました。マンハッタン距離の絶対値を外して「右下方向」「左下方向」の2パターンでDP。絶対値を外すと式の見え方がガラッと変わるのが面白かったです🚃 https://gist.github.com/maehrm/d8c291d8a5cf03a79abebc9a90367ba9 #AtCoder #競技プログラミング

D - National Railway https://atcoder.jp/contests/abc210/tasks/abc210_d

D - National Railway https://atcoder.jp/contests/abc210/tasks/abc210_d - abc210_d.py

gist.github.com

YMM748 @hyuki.net 確認ダイアログや声での呼びかけなど工夫を重ね、クロコさんたちとの信頼関係を築いているんですね。そんな中、熊本で地震が発生してしまいました。心配な状況です。このような地震災害の時にも、AIが頼れる存在になってくれるといいなとメルマガを読みながらそんなことを考えました。

ABC133-E「Virus Tree 2」を解きました✅ 根と非根で場合分けしてBFSで彩色数を掛け合わせる解法。非根では親の色も除く必要があるという工夫がポイントでした🦠 https://gist.github.com/maehrm/09b9b74b6ba01dacd08ce423bdf7c57e #AtCoder #競技プログラミング

E - Virus Tree 2 https://atcoder.jp/contests/abc133/tasks/abc133_e

E - Virus Tree 2 https://atcoder.jp/contests/abc133/tasks/abc133_e - abc133_e.py

gist.github.com

ABC186-E「Throne」を解きました✅ 「K*X ≡ -S (mod N)」の一次合同方程式に帰着。GCDで割ってから逆元を使ってXを求めました。整数論の考え方が活きる一問でした👑 https://gist.github.com/maehrm/75584b543c8d07beb6d9cabb350827d6 #AtCoder #競技プログラミング

E - Throne https://atcoder.jp/contests/abc186/tasks/abc186_e

E - Throne https://atcoder.jp/contests/abc186/tasks/abc186_e - abc186_e.py

gist.github.com

ABC175-D「Moving Piece」を解きました✅ K回以内の移動なのでサイクル検出で解きました。ちょうどK回ならダブリングが使えたと思います♟️ https://gist.github.com/maehrm/20c07d73910b9c91c423657e91929f4a #AtCoder #競技プログラミング

D - Moving Piece https://atcoder.jp/contests/abc175/tasks/abc175_d

D - Moving Piece https://atcoder.jp/contests/abc175/tasks/abc175_d - abc175_d.py

gist.github.com

ABC150-D「Semi Common Multiple」を解きました✅ 各a_kが2で割れる回数を揃え、最小公倍数Lを求めて「X=L×(2p+1)」の形で数える解法。奇数倍という制約を式変形で処理する発想がポイントでした🔢 https://gist.github.com/maehrm/0ae57ec072d6d0fb233cef474130cfa3 #AtCoder #競技プログラミング

D - Semi Common Multiple https://atcoder.jp/contests/abc150/tasks/abc150_d

D - Semi Common Multiple https://atcoder.jp/contests/abc150/tasks/abc150_d - abc150_d.py

gist.github.com

ABC445-F「Exactly K Steps 2」を解きました✅ 公式解説を参考に(min,+)半環でダブリング。行列の積で「経由地kを通る最短距離」を表現し、O(N³ log K)で計算できました🚶 https://gist.github.com/maehrm/abc9650ea3b1535cfeb068063eab5d20 #AtCoder #競技プログラミング

F - Exactly K Steps 2 https://atcoder.jp/contests/abc445/tasks/abc445_f

F - Exactly K Steps 2 https://atcoder.jp/contests/abc445/tasks/abc445_f - abc445_f.py

gist.github.com

ABC184-E「Third Avenue」を解きました✅ 同じ文字のワープ先を一度に追加し、使ったら`del warps[ch]`で削除。複数回試みるとTLEになるため、1度使ったら消す工夫が計算量を抑える鍵でした🌆 https://gist.github.com/maehrm/db1a27668085a80b8e2d7841e8a2407c #AtCoder #競技プログラミング

E - Third Avenue https://atcoder.jp/contests/abc184/tasks/abc184_e

E - Third Avenue https://atcoder.jp/contests/abc184/tasks/abc184_e - abc184_e.py

gist.github.com

ABC189-E「Rotate and Flip」を解きました✅ 各操作をアフィン変換行列で表現し累積をmat_histで保存。クエリは累積行列を掛けるだけでO(1)。行列で変換をまとめる発想が面白かったです🔄 https://gist.github.com/maehrm/2f2b0095c4f2737f1deb322df6f86891 #AtCoder #競技プログラミング

E - Rotate and Flip https://atcoder.jp/contests/abc189/tasks/abc189_e

E - Rotate and Flip https://atcoder.jp/contests/abc189/tasks/abc189_e - abc189_e.py

gist.github.com

YMM747 @hyuki.net 約6兆円と聞いて、ドキドキしながら読み進めましたが、クローデさんの発見のあたりからようやく落ち着いて読めるようになりました。便利な世の中ですが、アカウントを作ったものの熱が冷めてほったらかしになっているのもあるので注意が必要だなと改めて考える機会になりました。

ABC148-F「Playing Tag on Tree」を解きました✅ 2回のBFSで全頂点への距離を求め、「高橋君(逃げる側)が先に到達できる頂点」の中で青木君(鬼)からの距離の最大値が答え。シンプルな発想でスッキリ解けました🏃 https://gist.github.com/maehrm/bb8f559da489524b5df73b87ceed4d41 #AtCoder #競技プログラミング

F - Playing Tag on Tree https://atcoder.jp/contests/abc148/tasks/abc148_f

F - Playing Tag on Tree https://atcoder.jp/contests/abc148/tasks/abc148_f - abc148_f.py

gist.github.com

ABC443-E「Climbing Silver」を解きました✅ 公式解説のアイデアを参考に、dpを変更するのではなくマス目の情報を書き換える方針でアレンジしました。同じ発想でも実装の切り口が違うのが面白かったです🧗 https://gist.github.com/maehrm/63c90fd8dcdd682fc04ab10be0f33082 #AtCoder #競技プログラミング

E - Climbing Silver https://atcoder.jp/contests/abc443/tasks/abc443_e

E - Climbing Silver https://atcoder.jp/contests/abc443/tasks/abc443_e - abc443_e.py

gist.github.com

ABC131-E「Friendships」を解きました✅ スターグラフを基点に辺を追加する構築問題。スターグラフに気づくのに時間がかかりましたが😅 気づいてからはスッキリ解けました⭐ https://gist.github.com/maehrm/18e8886581d15add82e63edf29591626 #AtCoder #競技プログラミング

E - Friendships https://atcoder.jp/contests/abc131/tasks/abc131_e

E - Friendships https://atcoder.jp/contests/abc131/tasks/abc131_e - abc131_e.py

gist.github.com

ABC184-F「Programming Contest」を解きました✅ 前半・後半に分けてO(2^20)で全列挙する半分全列挙(Meet in the Middle)で解けました。以前も使った手法で、身についてきた実感があります💻 https://gist.github.com/maehrm/92dab93611c1229f8f1df3b34f06356e #AtCoder #競技プログラミング

F - Programming Contest https://atcoder.jp/contests/abc184/tasks/abc184_f

F - Programming Contest https://atcoder.jp/contests/abc184/tasks/abc184_f - abc184_f.py

gist.github.com

ABC151-E「Max-Min Sums」を解きました✅ ソートして各要素が最大・最小になるnCrを計算して合計し差を取る解法。最大値と最小値の総和を独立に求めて引く発想がスッキリしていて気持ちよかったです📊 https://gist.github.com/maehrm/637bd385f2a58c7ea8ecc6cbb2a99e31 #AtCoder #競技プログラミング

E - Max-Min Sums https://atcoder.jp/contests/abc151/tasks/abc151_e

E - Max-Min Sums https://atcoder.jp/contests/abc151/tasks/abc151_e - abc151_e.py

gist.github.com

ABC174-F「Range Set Query」を解きました✅ クエリをrの昇順にソートして処理するオフライン手法。各色の最新出現位置だけをBITで管理する発想が面白く、楽しい問題でした🔢 https://gist.github.com/maehrm/bea46834b16118375068a169eac7d750 #AtCoder #競技プログラミング

F - Range Set Query https://atcoder.jp/contests/abc174/tasks/abc174_f

F - Range Set Query https://atcoder.jp/contests/abc174/tasks/abc174_f - abc174_f.py

gist.github.com

ABC197-E「Traveler」を解きました✅ 各色の最左・最右座標を事前計算し、「左端から来た場合」「右端から来た場合」をDPで管理。次の区間を左右どちらから攻めるか比較するだけでスッキリ解けました🧳 https://gist.github.com/maehrm/8ff6a3ac5f50d6f675b01239e31c9e43 #AtCoder #競技プログラミング

E - Traveler https://atcoder.jp/contests/abc197/tasks/abc197_e

E - Traveler https://atcoder.jp/contests/abc197/tasks/abc197_e - abc197_e.py

gist.github.com

ABC169-E「Count Median」を解きました✅ 中央値の最小値と最大値を求めて差+1が答え。奇数・偶数で場合分けするだけのシンプルな考察が気持ちよかったです📊 https://gist.github.com/maehrm/03670b1ba7bba4f3365d15519158c99f #AtCoder #競技プログラミング

E - Count Median https://atcoder.jp/contests/abc169/tasks/abc169_e

E - Count Median https://atcoder.jp/contests/abc169/tasks/abc169_e - abc169_e.py

gist.github.com

ABC157-E「Simple String Queries」を解きました✅ 各文字をビットで表現してORをセグメント木で管理。区間のORのビット数が異なる文字数になる発想がスッキリしていて気持ちよかったです🔤 https://gist.github.com/maehrm/e667a9b3585d76d38eeab6ecb3f652b9 #AtCoder #競技プログラミング

E - Simple String Queries https://atcoder.jp/contests/abc157/tasks/abc157_e

E - Simple String Queries https://atcoder.jp/contests/abc157/tasks/abc157_e - abc157_e.py

gist.github.com

ABC142-E「Get Everything」を解きました✅ 福岡に行く前にTLEを出していて気になり、帰宅してすぐ取り組みました😄 「鍵の状態」でなく「開いている宝箱」をbitで表現するのがポイントでした🗝️ https://gist.github.com/maehrm/3e787279ae490b4e59624435f4030ec9 #AtCoder #競技プログラミング

E - Get Everything https://atcoder.jp/contests/abc142/tasks/abc142_e

E - Get Everything https://atcoder.jp/contests/abc142/tasks/abc142_e - abc142_e.py

gist.github.com

ABC462-E「Alternating Costs」を解きました✅ 斜め移動で進んで残りは「まっすぐ2歩」と「遠回り1歩」を比較する貪欲法。端数処理の場合分けが地味にポイントでした💰 https://gist.github.com/maehrm/cef794514147339b6b59a099f73500ca #AtCoder #競技プログラミング

E - Alternating Costs https://atcoder.jp/contests/abc462/tasks/abc462_e

E - Alternating Costs https://atcoder.jp/contests/abc462/tasks/abc462_e - abc462_e.py

gist.github.com

YMM745 @hyuki.net 《ひとつの記憶、ひとりの私》、以前の「人格は記憶に宿る」の話がここまで具体的な形になるとは。話が通じると「ひとりのポピー」が確かに存在すると感じられるという件、人間の存在や人格も記憶に支えられているんだなと改めて考えさせられました。

ABC457-E「Crossing Table Cloth」を解きました✅ 公式解説を参考にしたら瓜二つになりましたが😅 累積和で右端の最小値を高速に求めるアイデアがとても参考になりました🪡 https://gist.github.com/maehrm/98d015c7e3e820c443fb3428e924f4a0 #AtCoder #競技プログラミング

E - Crossing Table Cloth https://atcoder.jp/contests/abc457/tasks/abc457_e

E - Crossing Table Cloth https://atcoder.jp/contests/abc457/tasks/abc457_e - abc457_e.py

gist.github.com

ABC187-E「Through Path」を解きました✅ add_allとadd_subtreeに差分を記録しておき、最後のBFS1回で全ノードを確定させる遅延処理がポイントでした🌳 https://gist.github.com/maehrm/327abde7d5057f8ca70addb13b0c5489 #AtCoder #競技プログラミング

E - Through Path https://atcoder.jp/contests/abc187/tasks/abc187_e

E - Through Path https://atcoder.jp/contests/abc187/tasks/abc187_e - abc187_e.py

gist.github.com

ABC137-D「Summer Vacation」を解きました✅ 締め切り順にソートして日数を増やしながら、選べるバイトをヒープで管理して貪欲に選ぶ典型解法でした☀️ https://gist.github.com/maehrm/a91786aa0cec8521bcbd23a643533243 #AtCoder #競技プログラミング

D - Summer Vacation https://atcoder.jp/contests/abc137/tasks/abc137_d

D - Summer Vacation https://atcoder.jp/contests/abc137/tasks/abc137_d - abc137_d.py

gist.github.com