ほぼ静的な計画法

競技プログラミングで解いた問題の解法とコードを晒していくページ。ややマイナーなC♯。

AOJ 0053 (Sum of Prime Numbers : 素数の和)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0053 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0053 【概要】 n番目の素数までの素数の和を求める問題。 【解説】 各データセットに対してO(1)で返せるようにするために、あらかじめ…

AOJ 0052 (Factorial II : 階乗 II)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0052 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0052 【解説】 n!の末尾の0の数を求める問題。nが最大で20000となるため、実際に階乗した末尾をカウントしようとするとlong型でも収ま…

AOJ 0051 (Differential II : 整数の差)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0051 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0051 【解説】 最大の整数は、貪欲的に上の桁から大きな整数をとっていく場合となるため、文字列の降順にソートすればよい。また、最小…

AOJ 0041 (Expression : 式)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0041 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0041 【解説】 整数a,b,c,dと演算子+,-,*および()を使用して、10を作ることのできる式を求める問題。肝は全てのパターンをもれなく重複…

AOJ 0050 (Apple and Peach : りんごと桃)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0050 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0050 【解説】 文字列を置換すればよいが、apple=peach、peach=appleと置換すると、最初に置換したものも次で置換されてしまうため、一…

AOJ 0049 (Blood Groups : 血液型)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0049 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0049 【解説】 与えられる血液型の個数をコレクション等で管理し、カウントしていけばよい。 【コード】

AOJ 0048 (Class : 階級)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0048 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0048 【解説】 それぞれの条件に合致するようif文を書いて出力すればよい。 以下のコードでは、各階級の上限値を格納したSortedDictina…

AOJ 0047 (Cup Game : カップゲーム)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0047 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0047 【解説】 入れ替え操作をそのまま実装すればよい。 A=true、B=false、C=falseとしたDictionaryを用意し、入力で与えられたキーの…

AOJ 0046 (Differential : 標高差)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0046 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0046 【解説】 各標高のデータをコレクションに格納しておき、コレクションのMax-Minを出力すればよい。 【コード】

AOJ 0045 (Sum and Average : Sum and Average)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0045 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0045 【解説】 各行の値をTuple型のコレクションや2つのListに格納しておき、販売金額の総合計は販売単価×販売数量のSumを、販売数量の…

AOJ 0044 (Prime Number II : 素数 II)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0044 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0044 【解説】 AOJ0009が解けていれば、同様の手法で解くことができる。 kyosuke0924.hatenablog.com 与えられる素数の最大が50,000の…

AOJ 0043 (Puzzle : パズル)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0043 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0043 【解説】 「パズル」という名前の問題であるが、平たくいうと一色からなる麻雀あがり判定(特殊役除く)である。麻雀を知らない人…

AOJ 0042 (A Thief : 泥棒)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0042 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0042 【解説】 いわゆる0-1ナップザック問題。 動的計画法にて解いていけばよい。漸化式や解説については、リンク先のwikipediaを参照…

AOJ 0040 (Affine Cipher : アフィン暗号)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0040 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0040 【解説】 アフィン暗号を複合する問題。文字\(\gamma\)について、\(F(\gamma) = (\alpha \cdot \gamma + \beta) \bmod 26 \)の処…

AOJ 0039 (Roman Figure : ローマ数字)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0039 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0039 【解説】 ローマ数字の値を求める行う問題。 あらかじめ、アルファベットに対応した値のDictinaryを用意しておく。 あとは、「大…

AOJ 0038 (Poker Hand : ポーカー)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0038 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0038 【解説】 ポーカーの役判定を行う問題。以下の優先順位に従って判定していけばよい。 同一のカードが4枚あればフォーカード 同一…

AOJ 0037 (Path on a Grid : 格子上の経路)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0037 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0037 【解説】 原点に戻ってくるまで、順番にルートを辿っていく。右手を壁に着け、壁伝いに進むため、以下のルールに従って進んでいけ…

AOJ 0036 (A Figure on Surface : 平面上の図形)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0036 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0036 【解説】 二次元のパターンマッチングの問題。二次元の配列にてローリングハッシュを用いて、パターンと一致するかどうかを判定し…

AOJ 0035 (Is it Convex? : 凸?)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0035 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0035 【解説】 凸多角形において、任意の内角は 180° 以下である。すなわち、多角形の各辺に対し、その多角形の内点は全て、その辺を延…

AOJ 0034 (Railway Lines : 鉄道路線)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0034 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0034 【解説】 すれ違う地点の位置を求めればよい。 区間1側の終端駅から出発する列車をA、区間10側の終端駅から出発する列車をBとする…

AOJ 0033 (Ball : 玉)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0033 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0033 【解説】 筒Aに入ってる球を、球は昇順にしか積み上げられない制約下で、筒Bまたは筒Cに移していくことができるかどうかを判定す…

AOJ 0032 (Plastic Board : プラスティック板)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0032 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0032 【解説】 辺と対角線の長さが与えられるので、長方形と菱形を判定する問題。 長方形であれば、角が90°であることから\(a^2+b^2=c^…

AOJ 0031 (Weight : 天秤)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0031 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0031 【解説】 分銅の重さは2のn乗のため、入力された整数を2進数表記した場合のビットが立っている位置の分銅の重さが答えとなる。 す…

AOJ 0030 (Sum of Integers : 整数の和)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0030 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0030 【解説】 0~9までの整数までの中からn個選び、和がsになる組み合わせの個数を求める問題。最大でも\( \displaystyle {}_{10} \ma…

AOJ 0029 (English Sentence : 英語の文章)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0029 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0029 【解説】 AOJ0028と同様にDictionaryを用意し、キーに単語、値に出現回数を記録していけばよい。 最も多く出現する単語は、AOJ002…

AOJ 0028 (Mode Value : 最頻値)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0028 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0028 【解説】 Dictionaryを用意し、各整数が現れるごとに値に1を加算していく。すべて入力が終われば値が最も大きいキーを出力する。 …

AOJ 0027 (What day is today? : 何曜日?)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0027 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0027 【解説】 DateTime型にはDayOfWeekという題意ピッタリの関数があるので、ワンライナーで一発。 【コード】

AOJ 0026 (Dropping Ink : インキ)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0026 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0026 【解説】 二次元配列を用意。指定の範囲に従ってインクの滴下数を加算していき、滴下が終われば、各要素の最大値をループしながら…

AOJ 0025 (Hit and Blow : ヒットアンドブロー)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0025 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0025 【解説】 AOJ0226と入力形式が違うだけの問題。 【コード】

AOJ 0024 (Physical Experiments : 物理の実験)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0024 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0024 【解説】 球が割れるのに必要な最低速度\(v\)が与えられるので、球を割るのに必要な階数を求める問題。 与式から、必要な高さ\(y\…