(id:asi1024による)JOI本選予想問題:問題2 迷子(A Stray Child)

解法

幼女から母親までの距離 >= 幼女から一番近いハンターまでの距離 のとき

幼女に一番近いハンターが先に幼女へ辿りつけるので無理

幼女から母親までの距離 < 幼女から一番近いハンターまでの距離 のとき

母親が幼女への最短経路を行ければ一番よい。

またこのとき、ハンターは母親が幼女への最短経路を行くのを妨げることができない。なぜなら、経路を妨げるには母親よりも先回りして経路に乗っておく必要があるが、もしそれが出来たとすると条件に矛盾するため。

よって

幅優先探索するだけでよい。

ソース

続きを読む

(id:asi1024による)JOI本選予想問題:問題1 本棚 (Book Shelf)

解法

まあ、パッと見貪欲で終了って言ってもいいけど、詳しく解説してみる。簡単なDPから貪欲にする方針で。

dp[i] := 本棚 i..M を修理するのにかかる最低時間

とすると求める答は dp[1] で、このDPは次のように計算できる。

dp[i] <- infinity
j <- i
while 棚 i..j を1度に修理することが可能である:
    dp[i] <- min(dp[i], dp[j] + 1)
    j <- j+1

最初は dp[M] <- 1 としておけばいい。

ここで dp は明らかに単調減少だから、1度に修理する棚をできるだけ多くすればいいので、貪欲法で最適解が出せる。

他の考え方(といってもほぼ同じだけど)としては、本棚 1..M を修理する最適解は 1..M をいくつかの範囲に分割したもので表せることから考える。

その最適な範囲の集合の中には必ず 1 を含む範囲があるので、それを出来るだけ広げても集合の要素数が変わらないことから貪欲法で最適解が得られることが示せる。

と、書いてみたけどまあ「パッと見貪欲法」で十分な気がする。

ソース

続きを読む

ICPC Tokyo/Asia Regional Preliminary Contest

オンライン参加できるらしいので参加。10問中8問解けた。4位らしい。

A

やるだけ

B

i個目までやっていて、直前に右足を使った場合の最小を lr、左足の場合を rl とでもする。i+1個までの lr_next, nr_next を求められるとうれしい。i個目の場所をS[i]とすると

左足S[i+1]、右足S[i]が valid な配置なら rl_next = min(lr, rl+1) 、そうでないなら rl_next = infinity

左足S[i]、右足S[i+1]が valid な配置なら lr_next = min(rl, lr+1) 、そうでないなら lr_next = infinity

で計算するだけ。

C

dp[i][j] := i歩目でポーションの使用状況がjのときに実現可能な最大HP

でDPする。普通に部分集合を列挙してると 1000*3^P で間に合わないので j を大きいほうから回してやって 1個ずつ使うようにする。

D

やるだけ

E

頂点、爆弾と頂点を通る線と多角形の交点、爆弾と頂点を通る線へおろした垂線の足でダイクストラするとできそうだけど幾何は無理

F

左車輪と右車輪を LSpeed : RSpeed に外分する点を中心として回転させることになるのでやるだけ。

G

幾何無理

H

距離でダイクストラしながらできるだけコストの低い辺を採用する。

I

少人数から全部試す。ちょっと前にTopCoderで出た、パッと見二分探索っぽいけど、実際は二分探索はうまくいかなくてたくさんの人がハマった問題と同じ匂いがした。

計算量は結構きつくなるけど、まあそんなにたくさんオペレータは必要じゃない気がするので普通に通る。二分探索は落ちるんだろうか。

J

注文を頂点とするDAGの最小経路被覆を求めればよい。

最小経路被覆の求め方がアルゴリズム・イントロダクションに載ってた気がしたので読んでみたら演習問題として載っていたので解くハメになった。頑張って考えた結果頂点2倍した2部グラフを作って最大マッチング求めるとよいらしい。

JAPLJ Contest まとめと解説

結果

hos.lyricさんが600点(全問完答)で、2位の420点に大差をつけて優勝でした!おめでとうございます!

2位以下は接戦で、上位陣は3完にあとどれだけ点数を上乗せできるかがポイントだったようです。

問題

A, B, C, D, E, Fの6問でした。すべてお花を題材にした問題文になっています。あと、問題IDと問題の名前の頭文字が一致しています。

難易度はA, B, Cが簡単でD, E, Fが難しい、の3:3構成でした。D, E, Fは予想していたよりも皆さんの点が低かったのですが、部分点有りのコンテストの醍醐味を味わって頂けたと思います。

謝辞

素晴らしいコンテスト環境を提供してくれた imos さん、問題のテストや改良に協力してくださった rng_58 さん、問題文の日本語校正を手伝って頂いた kioa2002 さん、ありがとうございました。

↓以下に出題した問題の解説があります

続きを読む

JAPLJ Contest 告知

概要

JAPLJ Contestは今年のIOIで行ったカナダにおいて僕(JAPLJ)が「作った問題が少しずつ溜まっていてコンテストとか開きたい」と言っていたところimosが「それImo Judgeでできるよ」と言ってくれたことで開催が決定した大会です。

基本的にJAPLJが考えた問題を時間内に頑張って解くというコンテストです。奮ってご参加ください。

日時

2010年10月24日(日) 13時00分 〜 16時00分 (3時間)

追記: 夜の部が開催されることになりました。昼の部と同じ問題で、時間は

10月24日(日) 22時00分 〜 翌日01時00分 (3時間)

です。

参加登録は開始数時間前から許可されますが、大会開始後でも参加登録は可能です。

URL

Imo Judge で行われます。

素晴らしいジャッジ環境を用意してくれたいもすに感謝。

ルール

参加資格

誰でも参加できます。

問題

問題文はすべて日本語で提供されます。問題数は6問程度の予定です。

順位

1問ごとに100点が割り当てられており、部分点を得ることも可能です。順位は得た得点の合計によって決定されます。(分かる人には (JOI+ICPC)/2 で分かると思います)

言語

C, C++, Java が使えます。

資料

オンライン、オフライン問わずどのような資料を参照しても構いません。ただしコンテスト中に問題内容について他人と相談することは禁止します。