説明
そこ\(N \)多肢選択問題、最初の\(私は\)複数の選択肢の質問をしている\(a_iを\)オプション、その\(a_iを\)オプション番号れる1,2,3(\、...、 a_iを\)、正解する各オプションの確率は同じです。解答用紙をコピーすると、私はコピーが見当違いで期待していなかった、あなたに答えるために:最初の\(私は\)の解答用紙上の道と題しコピー解答\(私は+ 1 \)対象のトラック位置、特に、最初の\ (N- \)解答のコピーのチャネル話題\(1 \)対象チャネルの位置を。あなただけの答えが間違った位置にコピーし、何も間違った質問を、しなかったと仮定すると、いくつかのトピックを見つけることを期待します。
\(2 \当量のn \当量10000000,1 \当量a_iを\当量100000000 \)
溶液
最初と仮定\(私は\)の質問が持っている\(X \)オプション、\(I + 1 \)と題した\(Y \)オプションを選択します。
- \(X = Y \) 、明らかに最初のケースを行う\(I + 1 \)確率質問\(P = \ FRAC 1} {X} = {\ FRAC 1 {Y}} {\。) 。
- \(X-> Y-の\) 、条件付き確率の考え方は、最初に作る\(I + 1 \)最初のタイトルの確率\(私は\)で複数の選択肢の質問\(I + 1 \)実行可能な前提でタイトルを下\(I 1 \ +)タイトル正しい確率は、\(P = \ FRAC {Y } {X}回\ \ FRAC {1} {Y} = \ FRAC {1} {X} \) ;
- \(X- <Y-の\) 、同じトークンは、最初に行う\(I + 1 \)最初のタイトルの確率\(I + 1 \)で正しい複数の選択肢の質問\(私は\)選択したトピック可能な場合の確率を、次に\(P = \ FRAC {X}、{Y} \タイムズ\ FRAC。1} {X} = {\ FRAC。1 {Y}} {\)。
要約すると、最初に作成する\を(I + 1 \)確率の問題である\(P = \ 1 FRAC {} {\最大\ {{I} A_、A_。1} + {I}が\} \) 。
コード
#include <bits/stdc++.h>
using namespace std;
const int N = 10000000+5;
int n, A, B, C, a[N];
double ans;
int main() {
scanf("%d%d%d%d%d", &n, &A, &B, &C, a+1);
for (int i = 2; i <= n; i++)
a[i] = (1ll*a[i-1]*A+B)%100000001;
for (int i = 1; i <= n; i++)
a[i] = a[i]%C+1;
for (int i = 2; i <= n; i++)
ans += 1./max(a[i], a[i-1]);
ans += 1./max(a[n], a[1]);
printf("%.3lf\n", ans);
return 0;
}