((http://server.179.ru/olymp/2008/statements/c.html Условия задачи третьего тура))
Пусть имеется n мальчиков и m девочек.
Определим для данного фиксированного числа мальчиков n максимальное количество девочек, которое можно поставить между ними.
Между любыми двумя мальчиками можно посадить двух девочек, и с каждого края можно поставить по девочке. Получим такую картинку:
GBGGBGGBG...GBGGBG
Таким образом, максимальное значение m может быть равно 2n.
Аналогично, максимальное значение n может быть равно 2m.
%%(email) int Boys, Girls; cin >> Boys >> Girls;
// Сначала проверим возможность расстановки
if ( Boys > 2*Girls || Girls > 2*Boys ) { cout << "IMPOSSIBLE"; return 0; }
// Если мальчиков больше чем девочек, то будем выставлять двух мальчиков и одну девочку в виде "BGB", пока их не станет поровну while (Boys > Girls) { cout<<"BGB"; Boys=Boys-2; Girls=Girls-1; }
// Если девочек больше чем мальчиков, то будем выставлять двух девочек и одного мальчика в виде "GBG", пока их не станет поровну while ( Girls > Boys ) { cout<<"GBG"; Boys=Boys-1; Girls=Girls-2; }
// Теперь мы можем быть уверены, что мальчиков и девочек осталось поровну, поэтому будем выводить последовательность "BG" while ( Boys > 0 ) { cout<<"BG"; Boys=Boys-1; }
%%
---- адрес оригинала: ((/Информатика/Олимпиады/2008/Школьная/Разбор/C))