Weitere ähnliche Inhalte
Mehr von AtCoder Inc. (20)
AtCoder Regular Contest 001
- 3. A問題 解説
• プログラムの一例は以下の通り
– 標準入力から文字数を読み込む
– 標準入力から文字列を読み込む
– 要素数4の配列を用意する
– 全ての文字に対しループで判定を行う
• 文字に対応した配列をインクリメントする
– 配列の中で、最小値と最大値を出力する
• 適切な関数が存在しない場合はループで取り出す
- 5. B問題 解説
• 解き方は複数存在する
– 幅優先探索を用いる
– 差が10度以下になるまで、10度の変更をする。
10度以下は埋め込み
– 全部の温度に対して最短距離をワーシャルフ
ロイドなどで計算してしまう
• どれを書いても良い
- 9. D問題 解説
• 最短経路ならダイクストラ法?
– 頂点Vに対して、O(V^2)かO(ElogV)程度かかっ
てしまう。
– V=400,000, E=V^2なので、どちらも間に合わな
い
• 実際は交差しないかどうかを判定しないといけな
いのでさらに計算量がかかる。愚直実装でO(V^3)
• グラフの特徴を利用して、なんか工夫し
ないとだめ!
- 11. D問題 解説
• 各頂点に対して、距離をDPで求める
– 高さ0は距離1
– 高さjはdp[j] = min(dp[j], dp[i] + dist(point[i],
point[j]))
• 実際は左右の頂点が存在するので、両側について
考えなければならない
• もちろんdist関数は単純な距離だけではなく、交差
判定を行わなければならない。
– 更新回数はV^2 / 2程度?
- 12. D問題 解説
• 範囲を絞って枝刈り?
– これ以上先に絶対行けない場合は更新を止める
• ステップを更新するごとに、行ける角度などが狭まっ
て行く
• 交差判定もこれだけで十分
– 余計な頂点は無視
• 明らかに窪んでいる点や、直線になっている点など
• 最悪ケースはそれでもO(V^2)
– これでは通らない
» データセットが弱かったようで、かなり高速化すると
通ってしまうケースもあるようです。ごめんなさい>
<
- 14. D問題 解説
• 基本的なアイデア
– 凹んでる場所に行く必要は絶対にない
– であれば、持つべき情報は、以下のような形
のデータ
• 現在位置から、凹まずに行ける経路を左右独立に
持つ