せかいの世界(備忘録)

音楽・ITに関する色々なものを触ってみたり、競プロの記録を残したりします。

SoundHound C - Ordinary Beauty

問題

atcoder.jp

解法

  • 数列の要素が隣り合うm-1か所について、数字の差がdになる確率を考える。
  • 2個のサイコロを振って差がdになる確率は、
\displaystyle{

  \begin{cases}
    \frac{n}{n^2}  & (d = 0)\\
    \frac{2(n-d)}{n^2} & ( d > 0)
  \end{cases}

}
  • どの箇所も確率は等しいので、上記で求めた確率をm-1倍する。

コード

int main() {
  ll n,m,d;
  cin >> n >> m >> d;
  double ans = 0;
  if(d == 0) ans = 1/(double)n;
  else ans = 2*(n-d)/(double)(n*n);
  ans*= (m-1);
  printf("%.10lf\n",ans);
  return 0;
}