Форум Всеукраїнської інтернет-олімпіади NetOI


На форумі обговорюються лише питання, пов'язані з олімпіадою

Ви не зайшли.

#1 2020-11-11 15:30:45

GeniusDP
Олімпієць
Зареєстрований: 2020-10-15
Повідомлень: 18

Решение Задачи Toys2019

Код:

program toys2019;
var   
   countAns, n, i, curcoin, cnt1, cnt2, cnt5: longint;

begin
   read(n);
   cnt1:=0; cnt2:=0; cnt5:=0;
   for countAns:=1 to n do begin
      read(curcoin);
      if curcoin=1 then cnt1:=cnt1+1 else 
         if curcoin=2 then begin
            if cnt1>0 then begin dec(cnt1); inc(cnt2); end
               else begin write(countAns-1); halt; end;
         end
         else 
            begin
               if cnt2>=2 then begin cnt2:=cnt2-2; inc(cnt5); end
               else if (cnt2>0) and (cnt1>=2) then begin dec(cnt2); cnt1:=cnt1-2; inc(cnt5); end
               else if cnt1>=4 then begin cnt1:=cnt1-4; inc(cnt5) end
               else begin write(countAns-1); halt; end;
            end;
            
   end;
   write(countAns);
end.

Итак. Идея решения.
Будем хранить в 3-х переменных кол-во монет номиналом 1, 2 и 5.
Понятно, что если на вход приходит 1, то это супер: просто увеличиваем cnt1 на единицу. Сдачи не надо.
Если пришла двойка, то cnt2++ и тут 2 ситуации:
1)Есть хотя бы 1 монета номиналом 1 (cnt1>0) тогда выдаём сдачу (cnt1--). Понятно, что иначе выдать сдачу нельзя.
2)Если единичек нет, то мы не можем выдать сдачу и прекращаем работу.
Если пришло 5, то cnt5++;
С пятёркой заковырка: можно выдать сдачу 3-я способами:
1 1 1 1 1
1 1 1 2
1 2 2
Какой выгоднее? Ну рассуждаем логически: единичка самая лучшая монета(ей всегда можно выдать вообще любую сумму).
Двойка чуток "похуже". Пятёрка - вообще "бесполезная": мы её только принимаем и не можем использовать при выдачи сдачи.
Значит всегда лучше выдавать так, что бы затратить как можно меньше единичек(они нам ещё могут пригодится для размена).
Если можем выдать 1 2 2 - выдаём, иначе пробуем 1 1 1 2 и только потом 1 1 1 1 1.
Если выдать не получается никак, то завершаем работу. Как-то так.

Відредаговано GeniusDP (2020-11-11 16:02:56)

Поза форумом

 

Нижній колонтитул

Powered by Likt
© Copyright 2002–2009 Likt