Школа179: /Информатика//Информатика / Олимпиады/2008?//Информатика / Олимпиады / 2008 / Школьная//Информатика / Олимпиады / 2008 / Школьная / Разбор?/C ...

 

Разбор задачи C


Условия задачи третьего тура


Пусть имеется n мальчиков и m девочек.


Определим для данного фиксированного числа мальчиков n максимальное количество девочек, которое можно поставить между ними.


Между любыми двумя мальчиками можно посадить двух девочек, и с каждого края можно поставить по девочке. Получим такую картинку:


GBGGBGGBG...GBGGBG


Таким образом, максимальное значение m может быть равно 2n.


Аналогично, максимальное значение n может быть равно 2m.


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;
}


 
Файлов нет.[Показать файлы/форму]