ほぼ静的な計画法

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

AOJ 0023 (Circles Intersection : 円の交差判定)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0023 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0023 【解説】 円Aと円Bの交差・内包判定を行う問題。 円Aの半径が円Bの半径より大きく、かつ円Aと円Bの中心点の距離が円Aの半径-円Bの…

AOJ 0022 (Maximum Sum Sequence : 和の最大値)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0022 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0022 【解説】 数列\(a_n\)の連続する部分和の最大値を求める問題。負の数の取り扱いがポイントとなる。 基本的には前から順番に正負関…

AOJ 0021 (Parallelism : 平行判定)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0021 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0021 【解説】 \(A = (x_1, y_1) ,B = (x_2, y_2),C = (x_3, y_3) ,D = (x_4, y_4)\)が与えられ、直線\(AB\)と直線\(CD\)が平行かどう…

AOJ 0020 (Capitalize : 大文字変換)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0020 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0020 【解説】 半角英小文字、ピリオド、空白のみを含む文字列しか与えられないため、charクラスのToUpper関数を用いれば一発。 【コー…

AOJ 0019 (Factorial : 階乗)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0019 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0019 【解説】 与えられる入力が最大で20のため、long型の整数で収まる。順番に1から入力値まで掛け算した値を出力する。 【コード】

AOJ 0018 (Sorting Five Numbers : 5つの数の整列)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0018 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0018 【解説】 入力された整数を、OrderByDescendingを用いて降順にソートして出力すればよい。やるだけ問題。 【コード】

AOJ 0017 (Caesar Cipher : シーザー暗号)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0017 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0017 【解説】 アルファベットを1~26文字ずらし、ずらした結果に「the」「this」「that」が含まれていれば、解として出力する。 文字x…

AOJ 0016 (Treasure Hunt : 宝探し)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0016 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0016 【解説】 原点から、順次、回転する方向\(a\)と進む距離\(d\)が与えられ、最終的に位置する座標を答える問題。 進行する方向を\(\…

AOJ 0015 (National Budget : 国家予算)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0015 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0015 【解説】 整数の足し算であるが、入力される整数の桁数が100桁まである。よって、入力を整数型に置き換えて足し算することができ…

AOJ 0014 (Integral : 積分)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0014 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0014 【解説】 \(d\)は600の約数しか与えられないため、整数の計算のみで処理できる。 各ブロックの個数\(n\)は\(600÷d\)となるため、\…

AOJ 0013 (Switching Railroad Cars : 電車車両入替え)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0013 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0013 【解説】 後から行き止まりに入ってきた電車から先に出ていくことになる。すなわち、先入れ後出しの形になるため、Stackを用いて…

AOJ 0012 (A Point in a Triangle : 三角形と点)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0011 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0011 【解説】 点が三角形の内部にあるか、外部にあるかを判定する問題。 三角形の内部に点があるということは、三角形の各頂点を巡回…

AOJ 0011 (Drawing Lots : 阿弥陀くじ)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0011 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0011 【解説】 あみだくじにより、最終的にどのゴールに辿り着くかを答える問題。 横線を引くと、その横線の直後の段では横線の始点と…

AOJ 0010 (Circumscribed Circle of a Triangle : 外接円)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0010 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0010 【解説】 やるだけの問題であるが計算がかなりめんどくさい。 外接円の中心座標が求まれば半径は容易に算出できるので、まずは外…

AOJ 0009 (Prime Number : 素数)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0009 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0009 【解説】 以下の素数の数を求める問題。素数の判定はエラトステネスの篩を用いて調べた。 あらかじめ、操作判定を行って、素数の…

AOJ 0008 (Sum of 4 Integers : 4つの整数の和)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0008 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0008 【解説】 整数は区別するので、0~9までの数から重複を許して、4つを取り出す順列のうち、和がになるものの数を数えればよい。 計…

AOJ 0007 (Debt Hell : 借金)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0007 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0007 【解説】 借金をn回1.05倍する。1000未満の切り上げについては、1000で割った値をMath.Ceilingを用いて切り上げた後、1000倍すれ…

AOJ 0006 (Reverse Sequence : 文字列反転)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0006 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0006 【解説】 文字列を判定して出力すればよい。StringクラスのReverseを使用すれば一発。 【コード】

AOJ 0005 (GCD and LCM : 最大公約数と最小公倍数)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0005 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0005 【解説】 整数\(a,b\)の最大公約数と最小公倍数を求める問題。最小公倍数は最大公約数が求まれば簡単に求まるため、まずは最大公…

AOJ 0004 (Simultaneous Equation : 連立方程式)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0004 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0004 【解説】 連立方程式の解を求める問題。 まずの値を求めるため、を消去する。式1に\(e\)、式2に\(b\)を乗じると、 \begin{array} …

AOJ 0003 (Is it a Right Triangle? : 直角三角形)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0003 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0003 【解説】 与えらえた3つの整数が直角三角形の3つの辺になるかを判定する問題。 最も大きい整数をとしたときに、三平方の定理 が成…

AOJ 0002 (Digit Number : 桁数)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0002 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0002 【解説】 整数a,bの和の桁数を出力するため、ToStringで文字列化し、Lengthにて、長さを出力する。 【コード】

AOJ 0001 (List of Top 3 Hills : 山の高さ)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0001 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0001 【解説】 すべての入力を配列に格納し、降順に3つ出力する。LinqのOrderByDescendingを使うと簡潔に記述できる。 【コード】

AOJ 0000 (QQ : 九九)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0000 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0000 【解説】 「かける数」と「かけられる数」をそれぞれ1~9まで、二重ループで回して、掛け算の結果を出力する。 【コード】

AOJ 0254 (Scone : スコーン配達計画)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0254 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0254 【解説】 数列の連続する部分和における、の最大値を求める問題。 まずは前処理として、初項を0として、までの累積和の剰余の数列…

AOJ 0251 (Magic Square : 魔法陣)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0251 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0251 【解説】 石をノード、紐を辺としてグラフを作成したときに一直線のグラフが作れるかどうかを判定する問題。 辺が無い石はいくつ…

AOJ 0247 (Ice Maze : 氷の迷路)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0247 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0247 【解説】 処理は難しくないが、実行時間制限が非常にきつく、まさに時間との戦い。結論として、IDA*を使い、スタートからゴールま…

AOJ 0246 (Bara-Bara Manju : ばらばら饅頭)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0246 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0246 【解説】 要するに整数の配列m(1<=m<=9)が与えられ、合計が10となるグループ数の最大値を求める問題。入力から1~9までの度数表…

AOJ 0245 (Time Sale : タイムセール)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0245 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0245 【解説】 幅優先探索。 状態に現在地、経過時間、取得した商品、取得した商品の値引き値を持たせ、幅優先探索を行い、終了するま…

AOJ 0244 (Hot Spring Trip : 温泉旅行)

【問題】 https://onlinejudge.u-aizu.ac.jp/problems/0244 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0244 【解説】 AOJ 0212の類題。 隣接リストのキーを(町の番号,チケットの状態)の組み合わせで管理する。 チケットの状態を「未使用…