Cekpotlar#11316

Cekpotlar (Həll təhlili)

Təsəvvür edək ki, oyunçu bütün şarları təsadüfi sırayla bir anda çıxarıb, yəni n = a + b + c şardan təsadüfi bir düzülüş (permutasiya) alınıb. Hansısa rəng ilk dəfə qurtaranda oyun bitir. Deməli, sonuncu şarı düzülüşdə hamıdan tez yerləşən rəng qalib gəlir.

Qızıl cek-potun ehtimalını hesablayaq. Qırmızının qalib gəlməsi üçün cərgənin sonuncu şarı yaşıl və ya mavi olmalıdır. Hər iki halı araşdıraq.

Hal A: Cərgənin sonuncu şarının yaşıl olması ehtimalı -ə bərabərdir ( şardan dənəsi yaşıldır). Yaşıl uduzub. Qırmızı və mavi qalır, kimin qalib gələcəyini anlamaq lazımdır.

Cərgədən yaşıl şarları fikrən atıb yalnız qırmızı və maviyə (onların sayı a + c dənədir) baxaq. Əgər qırmızı və mavi şarların arasında ən sonuncu mavi olarsa, qırmızı qalib gələcək. a + c şardan sonuncunun mavi olması ehtimalı c / (a + c)-ə bərabərdir. Bu şarların hər biri bərabər ehtimalla sonuncu ola bilər, onların arasında isə dənəsi mavidir.

Halının ehtimalı \frac{b}{n} \cdot \frac{c}{a+c}-ə bərabərdir.

Hal B: Cərgənin sonuncu şarının mavi olması ehtimalı -ə bərabərdir ( şardan dənəsi mavidir). Mavi uduzub. Maviləri atıb qırmızı və yaşıla (onların sayı a + b dənədir) baxırıq. Əgər onların arasında sonuncu yaşıl olarsa, qırmızı qalib gələcək, bu ehtimal b / (a + b)-ə bərabərdir.

Halının ehtimalı \frac{c}{n} \cdot \frac{b}{a+b}-ə bərabərdir.

və halları kəsişmir (sonuncu şar eyni zamanda həm yaşıl, həm də mavi ola bilməz), buna görə qırmızının qalib gəlmə ehtimalı belə olacaq:

p_G = \frac{b}{n} \cdot \frac{c}{a+c} + \frac{c}{n} \cdot \frac{b}{a+b}

Analoji olaraq yaşılın qalib gəlmə ehtimalı belədir:

p_S = \frac{a}{n} \cdot \frac{c}{b+c} + \frac{c}{n} \cdot \frac{a}{a+b}

Mavinin qalib gəlmə ehtimalı belədir:

p_B = \frac{a}{n} \cdot \frac{b}{b+c} + \frac{b}{n} \cdot \frac{a}{a+c}

Nümunə

İkinci testə baxaq (a = 1, b = 2, c = 3, n = a + b + c = 6). Cek-potların udma ehtimallarını hesablayaq:

p_G = \frac{b}{n} \cdot \frac{c}{a+c} + \frac{c}{n} \cdot \frac{b}{a+b} = \frac{2}{6} \cdot \frac{3}{4} + \frac{3}{6} \cdot \frac{2}{3} = \frac{1}{4} + \frac{1}{3} = \frac{7}{12}, \\ p_S = \frac{a}{n} \cdot \frac{c}{b+c} + \frac{c}{n} \cdot \frac{a}{a+b} = \frac{1}{6} \cdot \frac{3}{5} + \frac{3}{6} \cdot \frac{1}{3} = \frac{1}{10} + \frac{1}{6} = \frac{4}{15}, \\ p_B = \frac{a}{n} \cdot \frac{b}{b+c} + \frac{b}{n} \cdot \frac{a}{a+c} = \frac{1}{6} \cdot \frac{2}{5} + \frac{2}{6} \cdot \frac{1}{4} = \frac{1}{15} + \frac{1}{12} = \frac{3}{20}

Alqoritmin həyata keçirilməsi

gcd funksiyası və ədədlərinin ən böyük ortaq bölənini hesablayır.

long long gcd(long long a, long long b)
{
  return b == 0 ? a : gcd(b, a % b);
}

solve funksiyası qırmızının qalib gəlmə ehtimalını hesablayır.

string solve(int a, int b, int c)
{
  int n = a + b + c;
  int q1 = n * (a + c);
  int q2 = n * (a + b);
  long long p = (long long)b * c * (q1 + q2);
  long long q = (long long)q1 * q2;
  long long g = gcd(p, q);
  return to_string(p / g) + "/" + to_string(q / g);
}

Proqramın əsas hissəsi. Daxil olan məlumatları oxuyuruq.

cin >> a >> b >> c;

Cavabı hesablayıb çap edirik. Qeyd edək ki, funksiya çağırışı:

cout << solve(a, b, c) << " " << solve(b, c, a) << " "
     << solve(c, a, b) << endl;