Недавно на собеседовании мне предложили несколько задачек, среди которой была задача о шарах. Вы, возможно, знаете ее, формулировка у ней такая. В корзине лежит m белых и n черных шаров. Из нее наугад вынимают 2 шара. Если шары одного цвета, то в корзину возвращают белый шар, если разного, то черный. Считается, что есть достаточное количество белых шаров вне корзины для их возврата в случае постоянной выемки пар из двух черных шаров. Вопрос: можно ли, зная числа m и n, заранее сказать, какой шар в корзине останется последним?
К своему стыду за отведенное время я эту задачу не решил, хотя провозился с ней долго. Я вообще несколько туповат и тугодум, поэтому быстро решать подобные задачи не могу. На днях я вернулся к этой задачке, так как решить ее было делом чести.
Сначала я снова начал бродить вокруг тех же безрезультатных идей, которые у меня были на собеседовании. Но потом вдруг вспомнил о недавнем чтении ТФКП и придумал вот что. Пусть общее число шаров в корзине соответствует некому комплексному числу , причем действительная часть показывает количество белых шаров, а мнимая — черных. Если вынули два белых шара и затем один вернули, то в корзине останется . Если вынули два черных и вернули белый, то в корзине будет . И, наконец, если вынули белый и черный и вернули черный, в корзине останется . Видно, что третий случай эквивалентен первому. Кроме того, общее число шаров на каждом шаге уменьшается ровно на единицу, то есть в конечном итоге действительно останется только один шар. Таким образом, при очередной выемке к текущему числу шаров прибавляют либо число , либо .
Пусть до того, как в корзине остался один шар, сделали выемок по и выемок по ( — неотрицательные целые). Тогда возможно два варианта: , если последний шар белый, и , если последний шар черный.
Вообще, сами комплексные числа тут особо не нужны, нужно только их представление на комплексной плоскости, т. е. можно вполне обойтись обычными векторами. Пусть — вектор, задающий начальное состояние корзины. Тогда конечное состояние можно представить в виде суммы начального вектора и линейной комбинации векторов и .
Таким образом, векторные уравнения распадаются на пары скалярных:
, если последний шар белый, и
, если последний шар черный.
Отсюда видно, что для белого шара и для черного. То есть если начальное число черных шаров четное, то последним останется белый шар, если нечетное — то черный. Это и есть ответ.
Мораль сей басни такова. Изучение любых, даже не связанных напрямую с текущей деятельностью, наук очень полезно, ибо позволяет по-новому взглянуть на насущные проблемы и быстрей найти решение.
Саша, скажи что за контора.
ABBYY
можно проще:
черный+черный = белый
черный+белый = черный
белый+черный = черный
белый+белый = белый
можно заметить, что черные шары изымаются исключительно по 2, а белые — по одному изымаются и иногда по одному добавляются.
т.е. белые изъять можно все в любом случае, пока шаров больше 1, а черные — только если их количество четно.
Конечно можно! Но это ж надо думать, а у меня думать получается плохо :)
Мне тоже попадалась интересная задачка, про перестановку двух интеджеров не используя третьей переменной. Можно использовать операции вида x или y = f(x,y). Главное, не тратить время пытаясь доказать, что это невозможно.
это реликтовый боянец.
xor
1. можно использовать не только xor а например операции +- да и не только их
2. к этому баянцу есть подбаянец — вместо xor использовать комбинацию &|~
с +\- могут быть сложности если числа вещественные сильно разных порядков или при переполнении.
Мне вот что непонятно. Если в 1 момент времени из корзины достаём черный+черный, то должны вернуть белый- это ломает все мои представления о «жизни».
Объясните пожалуйста.
А в чем неувязка-то?
Условие — В корзине лежит m белых и n черных шаров. Из нее наугад вынимают 2 шара. Если шары одного цвета, то в корзину возвращают белый шар.
Если в 1 момент времени вынимаю 2 ЧЁРНЫХ шара, то должен ВЕРНУТЬ в корзину БЕЛЫЙ шар, который не доставал — как это?
> Считается, что есть достаточное количество белых шаров вне корзины для их возврата в случае постоянной выемки пар из двух черных шаров.
В 1 раз когда читал условия задачи, опустил это предложения по непониманию. Простите мну такого :D