geam1113’s diary

主にAtcoderのコンテストの備忘録を書きます。AtCoder緑と水色を行ったり来たりしています。

AtCoder Biginner Contest 266 記録

コンテストページ
AtCoder Beginner Contest 266 - AtCoder

コンテスト中AC:A,B,D
コンテスト後にC,E,Fを自力(AtCoderの解説を見ず)AC

C - Convex Quadrilateral

下のサイトに判定方法がありました。
第6回 多角形の幾何(前編) | gihyo.jp

多角形上を半時計周りに並ぶ任意の3点A,B,Cが与えられた時、\vec{AB}に対して\vec{BC}が半時計回りの位置にあればよいようです。
Submission #34484140 - AtCoder Beginner Contest 266

#E - Throwing the Die
期待値の問題が最近いくつか出題されていますが、考え方の核となる部分は同じように思います。

f(i)iターン目で得られるスコアの期待値とすると、以下のように計算できます。

  • i = N
    f(i)=\frac{1+2+3+4+5+6}{6}=3.5

  • i\lt N
    f(i)=\frac{max(1,f(i+1))+max(2,f(i+1))+max(3,f(i+1))+max(4,f(i+1))+max(5,f(i+1))+max(6,f(i+1))}{6}

Nターン目は特に説明不要かと思いますので、それより前のターンについて書きます。
状態遷移を伴う期待値は、遷移先の期待値とその発生確率の積の総和をとると、遷移元の期待値を計算できます。
今回の場合、iゲーム目におけるスコアが遷移先であるi+1ターン目の期待値より高い場合に遷移しない選択をすることができます。
従って、出た目と遷移先の期待値のmaxをとればよいです。

というわけで、i=N,N-1,...,1の順にDPやメモ化再帰で問題を解くことができます。
Submission #34436150 - AtCoder Beginner Contest 266

F - Well-defined Path Queries on a Namori

N頂点N-1辺の単純連結グラフは木になります。そこに一辺足されると、閉路をただ1つ含むグラフになります。

閉路の異なる任意の2頂点v_i,v_jを通るパスを考えると、閉路の進行方向によって2種類のパスが存在します。
よって、閉路に属する辺を通るようなパスは問題の条件を達成できません。

以上から、以下の解法を考えました。
1. 与えられたグラフGから閉路に属する辺集合CをDFSで得る
2. GからCに属する辺を除いたグラフG'を得る
3. G'からUnion-Findで連結成分を得る
4. 各クエリを処理する。クエリiについてx_i,y_iが、同一連結成分に属するならYes、そうでなければNoと判定する

これでACすることができました。
Submission #34413373 - AtCoder Beginner Contest 266