Rustコトハジメ

プログラミング言語Rustに関する情報をお届けします。

競技プログラミング

AOJのBalls and Boxesを全クリして感じたこと

前に、AOJのコースをやっていて、その理由は網羅性があって学習の効率が良いからという話をしました。組み合わせ最適化(DPL)の問題の中に、Balls and Boxesというのがあり、 https://onlinejudge.u-aizu.ac.jp/courses/library/7/DPL/5 ひたすら色々な問題設…

包除原理を応用する問題

自力で解けず、他人の解法を見て、DPを使う解法はわかったのですが、理解しがたい解法があって、むしろそっちの方がマジョリティだったので、みんなが知ってる解法だから理解する必要があると考えて、結局5時間かかりました。コードから包除原理にノーヒント…

ヒストグラムの中の最大の長方形を見つけるアルゴリズム

https://onlinejudge.u-aizu.ac.jp/courses/library/7/DPL/3/DPL_3_C ヒストグラムが与えられて、その中にある長方形の最大面積を求めるという問題は日常生活で気にすることはありませんが、競技プログラミングでは結構重要なアルゴリズムなのではないかと思…

巨大ナップザック問題の考え方

AOLのライブラリコースのうちDPLにはさまざまな種類のナップザック問題が詰め込まれており、どれもエッセンスとしては重複がないので良問と思いました。そのうち、巨大ナップザック問題の考え方を紹介します。初見では全く太刀打ち出来なかったです。 https:…

いっ・・・いもす法出たー

AOJのDSLを全部解きました。全部Rustです。 内容としては Union Find (重みつきもある) セグツリー (遅延多め) スライド 圧縮 いもす法 です。重要なトピックが詰まってると思いました。 自分としては、AOJのライブラリコースの中ではこのDSLとDPL(動的計画…

ワーシャルフロイド法で嵌ったらDPテーブルのインデックスは集合というパターンがみえた

中国人郵便配達問題 https://www.rustforbeginners.com/entry/ja/2019/02/07www.rustforbeginners.com でワーシャルフロイド法を使って全点間最小距離を求めましたが、私の初期の解答はAOJの37番目のテストでこけてしまい、色々試行錯誤して間違いに気づくの…

中国人郵便配達問題の考え方

中国人郵便配達問題とは 中国人郵便配達問題は、巡回セールスマン問題 https://www.rustforbeginners.com/entry/ja/2019/02/06www.rustforbeginners.com の類問ですが、すべてのノードではなく、すべてのエッジを通るという問題です。 https://onlinejudge.u…

巡回セールスマン問題の考え方

巡回セールスマン問題が初見で解けなかったので、考え方をまとめておきます。 巡回セールスマン問題とは 考え方 コード 巡回セールスマン問題とは https://onlinejudge.u-aizu.ac.jp/courses/library/7/DPL/2/DPL_2_A 全部の点を通って帰ってくる最短経路を…

個数制限つきナップザック問題の考え方

個数制限付きナップザック問題にかなり苦戦したので、考え方を書き残しておきます。 個数制限つきナップザック問題とは 愚直に考えてTLE 真の解法 01ナップザックに帰着 m個をlogm個に圧縮する 個数制限つきナップザック問題とは 個数制限つきナップザック問…

LCSを使ってLISを実装する

LISのことを考えていたら、これは入力列をソートしたものとのLCSで計算出来るのではないかとふと思ったので実験します。 具体的には、LIS(A) = LCS(A, A.sorted.dedup)ですね。 直感的には正しいような気がします。というか意味合いとしては、A.sorted.dedup…

コイン問題で嵌ったので反省文を書きます

コイン問題とは 最初の解答 TLEをアドホックに修正しましょう 最終解 勘違いの原因は何か? コイン問題とは コイン問題というのは、「ある金額を作るのに最小のコイン数」を求めなさいという問題です。日本の貨幣はうまく設計されているため貪欲法で自明です…

動的計画法でOptionを使うとわかりやすい説

DPではDPテーブルの初期状態を決める必要があります。それはふつう、漸化式から求まるのですが、下のナップザック問題を解くDPの場合、dp[0]=0が初期状態ですね。 そしてこの場合、C++など他の言語では他のマスを-1など意味のない値で初期化すると思います。…

分割数の漸化式の考え方

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?作者: 秋葉拓哉,岩田陽一,北川宜稔出版社/メーカー: マイナビ発売日: 2012/01/28メディア: 単行本(ソフトカバー)購入: 25人 クリック: …

AtCoder Beginners Selectionをやった

AtCoder Beginners Selection - AtCoder AtCoderが用意した「初心者はまず全部これを解くこと」的な問題集を全部解きました。なんと4時間かかりました。最後の最後に朦朧としていてミスを冒しましたが、初心者向けということもあり、さすがに簡単でした。 た…

cargo-snippetがRustを最高にする

競技プログラミングでは、提出物として一枚のソースコードにすべてを詰めることを要求されます。だから、ふつうは自分なりのライブラリを作って、それをコピペして使うことになります。まずはテンプレートを貼り付けて、それから使うライブラリを貼り付けて…

sliceパターンを活用してプロコンの入力を読み取る

ALDSを読んでいて、時々気になった問題については手を動かすことにしています。 プログラミングコンテスト攻略のためのアルゴリズムとデータ構造作者: 渡部有隆,Ozy(協力),秋葉拓哉(協力)出版社/メーカー: マイナビ発売日: 2015/01/30メディア: 単行本(ソフ…