SlideShare ist ein Scribd-Unternehmen logo
1 von 20
AtCoder Regular Contest 001
解説
AtCoder株式会社 代表取締役
高橋直大
A問題 問題概要
• 1,2,3,4の4種類の文字で書かれた文字列が
与えられる。
• 一番多い数字の個数と、一番少ない数字
の個数を出力しなさい。
A問題 解説
• プログラムの一例は以下の通り
– 標準入力から文字数を読み込む
– 標準入力から文字列を読み込む
– 要素数4の配列を用意する
– 全ての文字に対しループで判定を行う
• 文字に対応した配列をインクリメントする

– 配列の中で、最小値と最大値を出力する
• 適切な関数が存在しない場合はループで取り出す
B問題 問題概要
• エアコンの設定温度をA度からB度に変更
したい
• 1回ボタンを押すことで変更可能な温度
は、1度、5度、10度の3種類。上に
も下にも変更できる
• ボタンを押す必要のある最小回数を出力
B問題 解説
• 解き方は複数存在する
– 幅優先探索を用いる
– 差が10度以下になるまで、10度の変更をする。
10度以下は埋め込み
– 全部の温度に対して最短距離をワーシャルフ
ロイドなどで計算してしまう

• どれを書いても良い
C問題 問題概要
• 8-queen問題の、3つのクイーンを置いた状
態が与えられる
• 残りの5つを配置せよ。もし不可能な場合
はNo Answerと出力せよ。
C問題 解説
• 全通り試すのが簡単に出来るため、深さ
優先探索で良い。
– 同じ列や行にすでに2つ置かれていたら失敗
– 置かれていないのであれば、残った5行に
残った5列を割り当てる。この割り当て方は
5!通り
• それぞれのパターンに対して、8-queenの条件を満
たしているか確認する
D問題 問題解説
• 右図のような道が与えられる
• 道の上しか通ることが出来ない
• 最短経路を求めなさい
– 幅は1,000,000以下
– 高さは200,000以下
D問題 解説
• 最短経路ならダイクストラ法?
– 頂点Vに対して、O(V^2)かO(ElogV)程度かかっ
てしまう。
– V=400,000, E=V^2なので、どちらも間に合わな
い
• 実際は交差しないかどうかを判定しないといけな
いのでさらに計算量がかかる。愚直実装でO(V^3)

• グラフの特徴を利用して、なんか工夫し
ないとだめ!
D問題 解説
• 考察してみよう!
– 頂点と赤・青の点以外は考える必要がない
– 後ろに戻ることは絶対にない
• ってことは動的計画法でいけそう?
D問題 解説
• 各頂点に対して、距離をDPで求める
– 高さ0は距離1
– 高さjはdp[j] = min(dp[j], dp[i] + dist(point[i],
point[j]))
• 実際は左右の頂点が存在するので、両側について
考えなければならない
• もちろんdist関数は単純な距離だけではなく、交差
判定を行わなければならない。

– 更新回数はV^2 / 2程度?
D問題 解説
• 範囲を絞って枝刈り?
– これ以上先に絶対行けない場合は更新を止める
• ステップを更新するごとに、行ける角度などが狭まっ
て行く
• 交差判定もこれだけで十分

– 余計な頂点は無視
• 明らかに窪んでいる点や、直線になっている点など

• 最悪ケースはそれでもO(V^2)
– これでは通らない
» データセットが弱かったようで、かなり高速化すると
通ってしまうケースもあるようです。ごめんなさい>
<
D問題 解説
• 基本的なアイデア
– 凹んでる場所に行く必要は絶対にない
D問題 解説
• 基本的なアイデア
– 凹んでる場所に行く必要は絶対にない
– であれば、持つべき情報は、以下のような形
のデータ
• 現在位置から、凹まずに行ける経路を左右独立に
持つ
D問題 解説
• 更新方法
– 以下のような頂点が与えられた場合
D問題 解説
• 更新方法
– 以下のような頂点が与えられた場合
– 角度が浅いものを消してしまい、更新してい
く
D問題 解説
• 更新方法2
– 以下のような頂点が与えられた場合
D問題 解説
• 更新方法
– 以下のような頂点が与えられた場合
– 交差してしまう?
D問題 解説
• 更新方法
– 以下のような頂点が与えられた場合
– 交差した時は、交差してしまった方を確定さ
せ、現在位置を変更する
D問題 解説
• 先ほどの様な更新方法をした場合

• どちらが内側にあるかを調査するごとに、
考えている頂点が1つ減る
– よって、この回数はO(V)で良い。

• これで十分な証明は各自考えてくださ
い!

Weitere ähnliche Inhalte

Was ist angesagt?

プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
 

Was ist angesagt? (20)

AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説
 
AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 
AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説
 
Square869120 contest #2
Square869120 contest #2Square869120 contest #2
Square869120 contest #2
 
AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説
 
ダブリング
ダブリングダブリング
ダブリング
 
AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説
 
AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説
 
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
 
AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説
 
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説
 
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
 

Mehr von AtCoder Inc.

Mehr von AtCoder Inc. (20)

TCO2017R1
TCO2017R1TCO2017R1
TCO2017R1
 
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
 
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
 
Chokudai Contest 001
Chokudai Contest 001Chokudai Contest 001
Chokudai Contest 001
 
AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
 
AtCoder Regular Contest 048
AtCoder Regular Contest 048AtCoder Regular Contest 048
AtCoder Regular Contest 048
 
MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説
 
arc047
arc047arc047
arc047
 
abc032
abc032abc032
abc032
 
CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説
 
abc031
abc031abc031
abc031
 
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
 
AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説
 
CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説
 
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説
 
AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説
 

AtCoder Regular Contest 001