Недавно на собеседовании мне предложили несколько задачек, среди которой была задача о шарах. Вы, возможно, знаете ее, формулировка у ней такая. В корзине лежит m белых и n черных шаров. Из нее наугад вынимают 2 шара. Если шары одного цвета, то в корзину возвращают белый шар, если разного, то черный. Считается, что есть достаточное количество белых шаров вне корзины для их возврата в случае постоянной выемки пар из двух черных шаров. Вопрос: можно ли, зная числа m и n, заранее сказать, какой шар в корзине останется последним?
К своему стыду за отведенное время я эту задачу не решил, хотя провозился с ней долго. Я вообще несколько туповат и тугодум, поэтому быстро решать подобные задачи не могу. На днях я вернулся к этой задачке, так как решить ее было делом чести.
Сначала я снова начал бродить вокруг тех же безрезультатных идей, которые у меня были на собеседовании. Но потом вдруг вспомнил о недавнем чтении ТФКП и придумал вот что. Пусть общее число шаров в корзине соответствует некому комплексному числу , причем действительная часть показывает количество белых шаров, а мнимая — черных. Если вынули два белых шара и затем один вернули, то в корзине останется . Если вынули два черных и вернули белый, то в корзине будет . И, наконец, если вынули белый и черный и вернули черный, в корзине останется . Видно, что третий случай эквивалентен первому. Кроме того, общее число шаров на каждом шаге уменьшается ровно на единицу, то есть в конечном итоге действительно останется только один шар. Таким образом, при очередной выемке к текущему числу шаров прибавляют либо число , либо .
Пусть до того, как в корзине остался один шар, сделали выемок по и выемок по ( — неотрицательные целые). Тогда возможно два варианта: , если последний шар белый, и , если последний шар черный.
Вообще, сами комплексные числа тут особо не нужны, нужно только их представление на комплексной плоскости, т. е. можно вполне обойтись обычными векторами. Пусть — вектор, задающий начальное состояние корзины. Тогда конечное состояние можно представить в виде суммы начального вектора и линейной комбинации векторов и .
Таким образом, векторные уравнения распадаются на пары скалярных:
, если последний шар белый, и
, если последний шар черный.
Отсюда видно, что для белого шара и для черного. То есть если начальное число черных шаров четное, то последним останется белый шар, если нечетное — то черный. Это и есть ответ.
Мораль сей басни такова. Изучение любых, даже не связанных напрямую с текущей деятельностью, наук очень полезно, ибо позволяет по-новому взглянуть на насущные проблемы и быстрей найти решение.