AtCoder Beginner Contest 271 G問題 Access Counter
問題
提出解答
問題の概要
で初期化されているカウンタがある.
- に対して, 毎日 時に以下を行う.
- のとき, % の確率で高橋君がカウンタを 増やす.
- のとき, % の確率で青木君がカウンタを 増やす. ある日の 時直前からにこの一連の行動を始めるとする. カウンタを にした人 (厳密には 回目にカウンタを 増やした人) が青木君である確率を求めよ.
制約
- は または
解法
動的計画法で考える. をカウンタが になったのが 時である確率とする. このとき, に対して, を求めることができれば, 求めるべき確率は
である.
ベースケースを求めることにする. の場合であるが, 時直前からにこの一連の行動を始めたと問題にあるので, 時にカウンタが になったと考える. つまり,
である.
更新式について考える. カウンタが になったのが 時であるとき, カウンタが になるのが 時である確率を であるとする. このとき,
となる. ここで, 次正方行列 を とし, を
とすると, が成り立つ.
よって, である. は 次正方行列であるから, として, が求まっているという仮定の元では を行列累乗におけるダブリングによって 時間で求めることができる.
最後に, を求める方法を考える.
カウンタが になったのが 時であるとき, カウンタが になるのが 時であるような場合について, 回目の 時でカウンタが 増える確率を とする. また, 1日 (24時間) カウンタが増えない確率を とする.
このとき, 回目の 時でカウンタが 増える確率は である. そして, カウンタが になったのが 時であるとき, カウンタが になるのが 時であるような場合はこの 以上の整数 で表わすことができ, 唯一である. よって, であるので,
となる.
を
とすると,
- . なお, 添字の計算については とする.
となる.
以上から, を 時間で求めることができる.
よって, を求めるパートがボトルネックになり, 時間で求めることができた.