Математичне сподівання однієї кості. Кость з гранями випадає кожною гранню 1, 2, ..., s з ймовірністю , тому її матсподівання дорівнює середньому арифметичному цих чисел:
Матсподівання суми дорівнює сумі матсподівань, тому для очок Аліси і очок Боба
Очки розподілені симетрично відносно матсподівання. На одній кості значення і , і s - 1 і так далі випадають з однаковою ймовірністю, тобто кость симетрична відносно (1 + s) / 2. Сума симетричних величин теж симетрична — відносно свого матсподівання.
Аліса виграє при E[A] > E[B], Боб виграє при E[A] < E[B]. Таким чином:
Для розв'язання задачі достатньо порівняти суми SA = \sum a_k + m та SB = \sum b_k + n.
Приклад
У Аліси вісім костей з гранями, а у Боба одна кость з гранями. Тоді SA = 8 \cdot 4 + 8 = 40 і SB = 6 + 1 = 7, так що SA > SB і відповідь ALICE.
Перевіримо це безпосередньо. Найменша сума, яку може набрати Аліса, дорівнює 8 \cdot 1 = 8, а найбільша сума Боба дорівнює . Тому Аліса виграє при будь-якому результаті кидків: p_a = 1, p_b = 0.
Розглянемо другий тест. У Аліси кості з і гранями, у Боба — з і гранями. Тоді SA = 6 + 4 + 2 = 12 і SB = 4 + 6 + 2 = 12, так що SA = SB і відповідь TIED.
Це видно і без обчислень: у Аліси і Боба однакові набори костей, відрізняється лише порядок їх запису. Тому їхні очки розподілені однаково, і p_a = p_b.
Реалізація алгоритму
Зчитуємо вхідні дані. Суму \sum a_k + m накопичуємо у змінній , а суму \sum b_k + n накопичуємо у змінній .
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;
}Порівнюємо суми і виводимо відповідь.
if (sA > sB)
puts("ALICE");
else if (sA < sB)
puts("BOB");
else
puts("TIED");