AOJ Volume1

AOJ0119 Taro's Obsession

問題リンク Taro's Obsession 解法 容疑者を頂点にした有向グラフで考え、Y->Xという証言を辺にします。頂点の出次数が0の頂点はもう出力してしまってよく、その頂点をグラフから取り除きます。これを繰り返せばOKです。 ソース

AOJ0182 Beaker

問題リンク Beaker 解法 DFS+貪欲で解けました。 一番大きいビーカーの水を小さいビーカーへ振り分けるやり方は非常に多くなるのでたぶん時間が厳しいです。ここで逆転の発想、全てのビーカーに水を注ぐことができた時、最後に水が入っているビーカーはどこ…

AOJ0132 Jigsaw Puzzle

問題リンク Jigsaw Puzzle 解法 DFS+枝刈りで解きました。ただ何も工夫をしないと余裕でTLEを貰います。 パズルとピースは全て1行を1つの整数として表すことにします。パズルは穴があいている部分が1、ピースは穴が無い部分が1になるようにします。こうする…

AOJ0194 Byakko Delivery Company

問題リンク Byakko Delivery Company 解法 交差点とその進入方向をノードにしたダイクストラ法が基本方針です。辺のコストは移動時間です。 ただし、(交差点、進入方向)だけではこの問題は解けないです。なぜなら、その交差点に最短で辿りつく場合が常に解の…

AOJ0177 Distance Between Two Cities

問題リンク Distance Between Two Cities 解法 バリバリ数学問題です。 まず、2つの都市間の最短距離は、円の中心と2つの都市を通るようにスパッと球を切断したときの円弧の長さとなります。 切断面の半径Rは球の半径と同じなので、2つの都市それぞれの座標(…

AOJ0146 Lupin The 4th

問題リンク Lupin The 4th 解法 経路復元+メモ化再帰で解きました。 dp[蔵を訪れた状態][現在いる蔵]に、その状態から全ての蔵を回るまでにかかる最短時間を格納しておきます。 さらに、next[i][j][2]に、状態 i 現在地 j のとき、次にどの状態に遷移すれば…

AOJ0199 Chairs Where Demanding People Sit

問題リンク Chairs Where Demanding People Sit 解法 シミュレート問題です。 椅子の状態を管理しておき、A〜Dの人に対応した座らせ方を実装します。 ソース

AOJ0198 Trouble in Artist Shinagawa's Artifact

問題リンク Trouble in Artist Shinagawa's Artifact 解法 2つのサイコロが同じものであるかをチェックできるかがカギです。 1つのサイコロは転がしたりすることで24種類の状態を持ちます。 あとは頑張って調べます。 ソース

AOJ0197 Greatest Common Divisor: Euclidean Algorithm

問題リンク Greatest Common Divisor: Euclidean Algorithm 解法 ユークリッドの互除法をやるだけです。 ソース

AOJ0196 Baseball Championship

問題リンク Baseball Championship 解法 チームについて勝ち数、負け数を数えてソートするだけです。 ソース

AOJ0195 What is the Most Popular Shop in Tokaichi?

問題リンク What is the Most Popular Shop in Tokaichi? 解法 売上の大きいところを記憶するだけです。 ソース

AOJ0193 Deven-Eleven

問題リンク Deven-Eleven 解法 AOJの本文中に肝心の図が無いので本家の問題文を参照するといいでしょう PCK2008本選。 6角形座標なので図を見て、移動ベクトルを作ります。ただ注意すべきはy座標が偶数か奇数かで移動ベクトルは変わるということです。移動の…

AOJ0192 Tsuruga Parking

問題リンク Tsuruga Parking 解法 重いシミュレート問題です。定義を読んで根気強く実装するしかないと思います。 駐車場の状態を配列で作っておき、そこに車があと何分停車しているかを入れておきます。0は空車を表すことにします。 これを使って1分毎にシ…

AOJ0191 Baby Tree

問題リンク Baby Tree 解法 DPです。 dp[i][j]: i日目に肥料jを与えたときの最大成長度 という表を作ることができます。 初日は何を与えても成長度1なのでdp[0][i]は全て1です。 次の日以降は直前の日の状態から算出できます。 dp[i][j]を埋めたかったら、dp…

AOJ0190 Eleven Puzzle

問題リンク Eleven Puzzle 解法 素直に20ステップまで幅優先探索を行うと状態数が多すぎて死んでしまいます。 なので両側探索を使いました。 ゴールの状態から20の半分の10ステップ以内で辿りつける状態を予め調べておきます。これをmとします。 そして、与…

AOJ0189 Convenient Location

問題リンク Convenient Location 解法 ある頂点から、自分以外の全ての頂点までの各々の最短経路長の総和が最小となる頂点番号を答える問題です。 ある頂点から別の頂点までの最短路が欲しいので全点間最短経路を求めるワーシャル・フロイド法を使います。 …

AOJ0188 Search

問題リンク Search 解法 2分探索における目的の値との比較が何回行われるかを数える問題です。 アルゴリズムは問題に乗っている通りです。 自分は比較を行うという部分をメソッド化しています。 回数を数えるコードを散在させないためです。が、この問題は単…

AOJ0187 Stoning Fortune

問題リンク Stoning Fortune 解法 幾何問題です。 3本の線分に0, 1, 2と番号付けしたとして、0と1, 1と2, 2と0の線分の交点を求めます。 交点が存在しなかったら三角形は作れません。 あとは3つの交点でできる三角形の面積を求めて大きさを見るだけです。線…

AOJ0186 Aizu Chicken

問題リンク Aizu Chicken 解法 会津地鶏を買う量の解をQとすると、Qを境に言いつけどおりの買い物ができるかどうかが分かれます。よってQについての2分探索を行います。Qが0として求まった場合は買い物失敗です。 ソース

AOJ0185 Goldbach's Conjecture II

問題リンク Goldbach's Conjecture II 解法 エラトステネスの篩を作ります。 あとは2素数であるかどうかを調べます。 ソース

AOJ0184 Tsuruga Castle

問題リンク Tsuruga Castle 解法 やるだけ問題です。 ソース

AOJ0183 Black-and-White

問題リンク Black-and-White 解法 3*3で揃っているものを探すだけなのでやりやすい方法をどうぞ。 今回は、bを1、wを-1として置き換えて、各行、各列、各斜めに対して総和をとり、絶対値が3になっているところがあるかどうかで判定しました。 ソース

AOJ0181 Persistence

問題リンク Persistence 解法 解となる幅がWだとします。すると、W' ソース

AOJ0180 Stellar Performance of the Debunkey Family

問題リンク Stellar Performance of the Debunkey Family 解法 ストレートな最小全域木問題です。 UnionFind木を用いてクラスカル法によって最小全域木を求めます。 (UnionFindクラスはwakaba.wikiのものを利用させていただいています) ソース

AOJ0179 Mysterious Worm

問題リンク Mysterious Worm 解法 虫の長さは最大10。各部分が取りうるのは3色なので、虫の全状態数は3^10に収まります。 よって幅優先探索可能となります。 虫の隣り合った色が違う部分を見つけ、それらの色ではない最後の1色で塗り替えて状態遷移とします…

AOJ0178 TETORIS

問題リンク TETORIS 解法 実装問題です。 ブロックを置くロジックと、行を消すロジックの2つをがんばって作ります。 行が揃っていたら、それより上の行全てを1段下にずらします。これを続けられるだけ続けます。 ソース

AOJ0176 What Color?

問題リンク What Color? 解法 "#xxxxxx"をsubstringし、Integer.parseInt()で16を渡すことで一気に0〜255に変換できます。 あとは色全てと比較して近い色を探します。 ソース

AOJ0175 A King in Hawaii

問題リンク A King in Hawaii 解法 BigIntegerにはn進数に直すメソッドがあるので一発です。 ソース

AOJ0174 Badminton

問題リンク Badminton 解法 サーブを打つ人は点を決めた人なので、文字列の2文字目以降に登場するAの個数がAの得点です。Bも同様です。 ゲームが終わる時、必ず2点差以上がついているので、得点集計が終わった後に得点が高い方が決定打を決めたとわかります。…

AOJ0173 Haunted House

問題リンク Haunted House 解法 やるだけ問題です。 午前人数*200 + 午後人数*300 が収入です。 ソース