Zər atma#11753

Zər atma (Həll təhlili)

Bir zərin riyazi gözləntisi. üzlü zər 1, 2, ..., s üzlərinin hər birini ehtimalı ilə göstərir, buna görə onun riyazi gözləntisi bu ədədlərin arifmetik ortasına bərabərdir:

E = \frac{1 + 2 + ... + s}{s} = \frac{1+s}{2}.

Cəmin riyazi gözləntisi riyazi gözləntilərin cəminə bərabərdir, buna görə Alisanın xalları və Bobun xalları üçün

E[A] = \frac{(a_1 + 1)+ ... + (a_m + 1)}{2},~~~E[B] = \frac{(b_1 + 1) + ... + (b_n + 1)}{2}

Xallar riyazi gözləntiyə nəzərən simmetrik paylanıb. Bir zərdə və , və s - 1 və s. qiymətlər eyni ehtimalla düşür, yəni zər (1 + s) / 2 ətrafında simmetrikdir. Simmetrik kəmiyyətlərin cəmi də simmetrikdir — öz riyazi gözləntisinə nəzərən.

Alisa E[A] > E[B] olduqda qalib gəlir, Bob isə E[A] < E[B] olduqda qalib gəlir. Beləliklə:

p_a > p_b ⇔ E[A] > E[B] ⇔ \\ a_1 + a_2 + ... + a_m + m > b_1 + b_2 + ... +b_n + n.

Məsələni həll etmək üçün SA = \sum a_k + m və SB = \sum b_k + n cəmlərini müqayisə etmək kifayətdir.

Misal

Alisanın üzlü səkkiz zəri var, Bobun isə üzlü bir zəri var. Onda SA = 8 \cdot 4 + 8 = 40 və SB = 6 + 1 = 7, deməli SA > SB və cavab ALICE-dir.

Bunu bilavasitə yoxlayaq. Alisanın toplaya biləcəyi ən kiçik cəm 8 \cdot 1 = 8-dir, Bobun ən böyük cəmi isə -dır. Buna görə Alisa istənilən nəticədə qalib gəlir: p_a = 1, p_b = 0.

İkinci testə baxaq. Alisanın və üzlü zərləri var, Bobun isə və üzlü zərləri var. Onda SA = 6 + 4 + 2 = 12 və SB = 4 + 6 + 2 = 12, deməli SA = SB və cavab TIED-dir.

Bu, hesablamalar olmadan da görünür: Alisa və Bobun zər dəstləri eynidir, yalnız onların qeyd olunma sırası fərqlidir. Buna görə onların xalları eyni cür paylanıb və p_a = p_b.

Alqoritmin realizasiyası

Giriş məlumatlarını oxuyuruq. \sum a_k + m cəmini dəyişənində, \sum b_k + n cəmini isə dəyişənində toplayırıq.

scanf("%d %d", &m, &n);
sA = m;  sB = n;
for (i = 0; i < m; i++)
{
  scanf("%d", &x);
  sA += x;
}

for (i = 0; i < n; i++)
{
  scanf("%d", &x);
  sB += x;
}

Cəmləri müqayisə edib cavabı çap edirik.

if (sA > sB)
  puts("ALICE");
else if (sA < sB)
  puts("BOB");
else
  puts("TIED");