Сразу заметим что задача с n контейнерами сводится к n-1 тривиально - убираем один случайный контейнер, испытываем по любой методике остальные. Если в них нет яда, значит яд в убранном в самом начале. Это имеет значение только на некоторых "граничных" значениях контейнеров.
Возьмём сначала два контейнеров (один - с ядом). Вообще, нужно бы две крысы, вкалываем каждой по одной дозе и смотрим. Но 2 контейнера - это как раз граничное значение, можем применить "трюк" и сэкономить одну крысу. Просто берём одну, вкалываем ей из случайного и смотрим.
Расширяем до 3 контейнеров. Достаточно 2 крыс - вкалываем им по две дозы (одной - из 1 и 2, второй - из 2 и 3), если сдохнут обе, значит яд в общем контейнере, если только одна - значит в том, который необщий у этой крысы. Опять же, с учётом трюка можно один контейнер убрать, сведя к предыдущей (но в предыдущей уже так нельзя будет сделать, так что и толку нет, что так что эдак 2 крысы получится).
4 контейнера - 3 крысы. 1 2 3, 2 3 4, 3 4 1. С трюком - 2.
5, 6 и 7 - тоже три, но трюк тут не сработает. 8 - 4, но с трюком. 9-15 4 без и тыды.
В общем, правило простое - округляем вверх до ближайшей степени двойки (k) и k будет ответом. Нюанс только если n и есть степень двойки, тогда и округлять вверх не надо