Яка ймовірність?#1571

Яка ймовірність? (Розбір)

Розглянемо гру з точки зору теорії ймовірності:

Нас цікавить ймовірність того, що виграє -й гравець.

Факт виграшу -го гравця означає, що:

При цьому -й гравець може виграти:

Підсумкова ймовірність дорівнює сумі ймовірностей усіх цих випадків.

Щоб -ий гравець виграв на своєму першому ході, повинні виконатися дві умови:

Оскільки події незалежні, то ймовірність для -го гравця виграти на своєму першому ході дорівнює

p \cdot (1 - p)^{i - 1}

-й гравець виграє на своєму другому ході, якщо:

Ймовірність для -го гравця виграти на своєму другому ході дорівнює

p \cdot (1 - p) ^ {i - 1} \cdot (1 - p)^n

Аналогічно розмірковуючи, ми отримаємо що ймовірність для -го гравця виграти на своєму -ому ході дорівнює

p \cdot (1 - p)^{i - 1} \cdot (1 - p)^{n(k - 1)}

Тепер залишається підсумувати отримані ймовірності. Загальна ймовірність виграшу -го гравця дорівнює

p \cdot (1 - p)^{i-1} (1 + (1 - p)^n + (1 - p)^{2n} + .. + (1 - p)^{kn} + ...)

У дужках знаходиться нескінченна геометрична прогресія з першим членом і знаменником (1 - p)^n. Ймовірність виграшу дорівнює

p \cdot (1 - p)^{i - 1} \frac{1}{1-(1-p)^n} = \frac{p \cdot (1 - p)^{i - 1}}{1 - (1 - p)^n}

Окремо слід зазначити, що при p = 0 відповідь дорівнює .

Реалізація алгоритму

Читаємо вхідні дані.

scanf("%d",&t);
while(t--)
{
  scanf("%d %lf %d",&n,&p,&i);

Якщо ймовірність дорівнює , то виводимо .

  if (p == 0) printf("0\n");
  else
  {

Інакше шукану ймовірність обчислюємо за наведеною вище формулою. Результат виводимо з знаками після десяткової точки.

    res = p * pow(1 - p,i - 1) / (1 - pow(1 - p,n));
    printf("%.4lf\n",res);
  }
}