Богдан, Данило та Максим намагаються придумати назву для команди на одне цiкаве змагання. За правилами змагань назва команди повинна складатися з малих латинських лiтер та мати довжину не бiльшу за n. Оскiльки хлопцi не надто креативнi, всi запропонованi ними варiанти були досить дивними та вiдразу вiдкидались. Тому вони попросили вас придумати для них назву. Також вiдомо, що за кожне входження стрiчки bohdan у назву Богдан заплатить вам b гривень, за кожне входження стрiчки danylo Данило заплатить d гривень, а Максим заплатить вам m гривень за кожне входження стрiчки maksym. Яку максимальну кiлькiсть грошей ви можете отримати, якщо придумаєте оптимальну назву для команди?
// PascalABC.NET 3.0, сборка 1157 от 02.02.2016 begin var n:=ReadInteger('n='); if n<0 then Writeln(n,'! не определено: n<0') else if n=0 then Writeln('0!=1') else begin var p:BigInteger:=1; for var i:=2 to n do p*=i; Writeln(n,'!=',p) end end.
в кинозале всего 16×32=512 мест. Сообщение о купленном билете однозначно определяет выбор одного из этих мест. Из уравнения 2 i = 512=29получаем: i=9 бит. Но эту же задачу можно решать иначе. Сообщение о номере ряда несет 4 бита информации, т.к. 24=16. Сообщение о номере места несет 5 бит информации, т.к. 25=32. В целом сообщение про ряд и место несет: 4+5=9 бит информации. Данный пример иллюстрирует выполнение закона активности информации (правило сложения): количество информации в сообщении одновременно о нескольких результатах независимых друг от друга событий равно сумме количеств информации о каждом событии отдельно.
begin
var n:=ReadInteger('n=');
if n<0 then Writeln(n,'! не определено: n<0')
else
if n=0 then Writeln('0!=1')
else begin
var p:BigInteger:=1;
for var i:=2 to n do p*=i;
Writeln(n,'!=',p)
end
end.
Тестовое решение:
n= 138
138!=691778647261948849222819828311491035886734385827028118707676848307166514238979223884785249055995983385450621636277440066920043595627074569065446040152660143904127838730788278294186615891819670506731208704000000000000000000000000000000000