AOJ0262 Making Sugoroku

問題リンク Making Sugoroku

  • 解法

マスを頂点にした有向グラフを作ります。
マスiからサイコロを振って進み、マスの指示に従って辿りつけるマスjに向かって有向辺を張ります。あがりマスから逆辺を辿ると、訪問したマスはあがることができるマスになります。あとは、ふりだしマスから有向辺を辿り、辿りついたマス全てがあがりに行けるマスならばOKと判定できます。

  • ソース
続きを読む

AOJ0261 Mayan Crucial Prediction

問題リンク Mayan Crucial Prediction

  • 解法

入力された日が基準日(0.0.0.0.0 or 2012/12/21)から何日離れているかを計算して、もう片方の暦の上でその日数分、日にちを進めました。
1日ずつカウントするとえらいことになるので、1周期(マヤなら13*20*20*18*20日、西暦なら(365or366)日)まとめて動かしてやれば速く計算できます。

  • ソース
続きを読む

AOJ0099 Surf Smelt Fishing Contest II

問題リンク Surf Smelt Fishing Contest II

  • 解法

最初はPriorityQueueでゴリオシできると思ったのですが無情のTLE。
なのでセグメント木っぽいの作って解きました。
木のノードには、その区間の最大匹数とそのidを持たせておき、クエリが来るたびに更新します。
解は常に根のノードに入っているので、検索処理は省略できます。

  • ソース
続きを読む

AOJ0098 Maximum Sum Sequence II

問題リンク Maximum Sum Sequence II

  • 解法

よくある総和の問題です。
(1, 1)-(i, j)の部分行列の総和S[i][j]を前計算しておくと、
(y, x)-(i, j)は
S[i][j] - S[y-1][j] - S[i][x-1] + S[y-1][x-1]
で求められます。

  • ソース
続きを読む

AOJ0097 Sum of Integers II

問題リンク Sum of Integers II

  • 解法

DPです。
dp[N][X][S]: X以下の数字から異なるN個を選んで、和がSになる組み合わせ数
という表を埋めれば解けます。

  • 解法2

DPですが、
dp[N]: 2個の数字を使って和がNになる組み合わせ
という表を用意して
dp[i] * dp[N-i]
の総和を取る方が断然簡単ですね

  • ソース
続きを読む

AOJ0096 Sum of 4 Integers II

問題リンク Sum of 4 Integers II

  • 解法

よくあるタイプの数え上げ問題です。
(a, b)と(c, d)の組に分け、(a, b)で和sを作る組み合わせ数、(c, d)で和n-sを作る組み合わせ数を掛け合わせていけば解けます。

  • ソース
続きを読む