You are on page 1of 5

Printing

СЕЗОН 2021/2022 – ПЪРВИ РУНД

Иванчо, вече навършил 18-годишна възраст, решил да започне свой собствен


бизнес. Той купил печатна преса и започнал да печата вестници.
Неговата печатна машина работи по следния начин. Първо Иванчо избира цяло
положително число К и нарежда по един печат на всички букви от азбуката в К редици.
След това въвежда последователност от инструкции, които машината да следва.
Накрая пуска машината да печата. Клиентите на Иванчо идват с точно определен
текст, който искат той да им изпечата, затова му трябва помощ с изработването на тази
„програма“.
За целите на задачата можем да считаме, че текстът на клиент се състои от N
малки латински букви и долни черти („_“). Необходимо е да се разпределят буквите в К
начални редици и да се намери последователност от инструкции, след изпълнението
на която изпечатаният текст да съответства на изискваният текст от клиента.
По време на изпълнение на инструкциите машината има една редица, която тя
счита за активна. Освен К-те редици, една от които е активна (в началото това е
първата), машината има и „помощен“ стак. Тя може да слага върху него печат от
дадена редица и да взима най-горния печат от него и да го сложи в някоя редица.
Възможните инструкции, които можете да използвате, са:
1.cl – Извърши циклично отместване на активната редица наляво (вземи първия
печат от нея и го сложи в нейния край). Ако тя е съдържала печатите abcdk в този ред,
редът на буквите ще стане bcdka . Цената на тази инструкция е A.
2.cr – Извърши циклично отместване на активната редица надясно (вземи
последния печат от нея и го сложи в началото й). Ако тя е съдържала печатите abcdk в
този ред, редът на буквите ще стане kabcd . Цената на тази инструкция е B.
3.w Cnt – Извърши следната операция Cnt пъти – Вземи първата буква от
активната редица, напиши я на хартията и я премести в края на редицата. Ако
редицата е била със съдържание kabcd , а Cnt = 2, то ще бъдат изпечатани буквите ka ,
а редицата ще стане bcdka . Цената на тази инструкция е
Cnt
M M M M
⌊ ⌋ + ⌊ ⌋ + …+ ⌊ ⌋ =∑ ⌊ ⌋ . Тук Cnt трябва да бъде цяло положително число.
1 2 Cnt 1 i
4. cd X – смени активната редица да бъде тази с индекс X. Цената на тази
инструкция е D.
5. push - вземи първия печат от активната редица и го сложи отгоре на помощния
стак. Например, ако активната редица има съдържание abcdk , а помощният стак – xyz
(приемаме, че дъното на стака е левият край, а върхът десния), техните съдържания
ще станат съответно bcdk и xyza. Цената на тази инструкция е H.
Printing
СЕЗОН 2021/2022 – ПЪРВИ РУНД

6. pop - вземи първия печат от помощния стек и го сложи в началото на активната


редица. Например, ако активната редица има съдържание bcdk , а помощният стак -
xyzа, техните съдържания ще станат съответно аbcdk и xyz . Цената на тази инструкция
е H.
Допълнително Иван трябва да плаща и за обновяване на машината, така че тя да
поддържа K-те редици, които вие му дадете. Максималният брой редици, които може
да сложи на машината, е 27 (латинската азбука плюс „_“), а на вас са ви дадени 27
цели числа – колко трябва да плати съответно за даден брой редици. За K редици той
трябва да плати pricek
Целта Ви е да минимизирате сбора от цената за ползвания брой редици и цените
за операциите, които използвате. Максималният брой операции е 106.

Вход
От първия ред на файла printing.in се въвежда едно цяло положително число
N. От втория ред се въвежда текстът, който Иванчо трябва да изпечата. На следващия
ред се въвеждат константите A, B, M, D, H, които са неотрицателни цели числа. Те
отговарят за оценяване на решението ви. На последния ред на входа ще следват 27
числа – съответната цена за даден брой редици.

Изход
На първия ред на изходния файл printing.out трябва да се изведе K – броя
редици. На следващите К реда трябва да се изведат съдържанията на редиците от
печати, като всяка буква се среща в не повече от една редица. На следващия ред
трябва да следва броят инструкции за машината – InstructionCnt, а на следващите
InstructionCnt редове всяка от инструкциите.

Оценяване
За всеки тест нека minScore е най-малкият резултат измежду резултатите на
minScore+1
всички участници, а yourScore е вашият резултат. Ще получите умножено
yourScore+1
по точките, предвидени за този тест.

Ограничения
7
1 ≤ A , B , M , D, H ≤10
4
1 ≤ N ≤ 10
Printing
СЕЗОН 2021/2022 – ПЪРВИ РУНД

6
pricek ≤10
Ограничение по време: 5 sec.
Ограничение по памет: 256 MB.

Подзадачи

Част от Допълнително ограничение Начин на получаване на текста


тестовете
20% Средната дължина на думите Редица от валидни английски думи, не
в текста е не повече от 3. задължително имаща смисъл.
20% В текста има по-малко от 9 Редица от валидни английски думи, не
различни букви. задължително имаща смисъл.
30% N ≤10 3 Откъс от текст на английски в интернет,
където всички думи са разделени със
знака “_“, главните букви са превърнати в
малки и липсват цифри и препинателни
знаци, както и всякакви други символи
освен тези от английската азбука и “_“.
30% Няма Откъс от текст на английски в интернет,
където всички думи са разделени със
знака “_“, главните букви са превърнати в
малки и липсват цифри и препинателни
знаци, както и всякакви други символи
освен тези от английската азбука и “_“.
Printing
СЕЗОН 2021/2022 – ПЪРВИ РУНД

Примерен тест

Вход (printing.in) Изход (printing.out)


7 3
hellohi hel
1 2 3 4 5 o
1 2 3 4 5 6 7 8 9 10 i
11 12 13 14 15 16 17 18 19 120 11
21 22 23 24 25 26 27 w 2
w 1
cr
w 1
cd 2
w 1
cd 1
push
cd 3
pop
w 2

Обяснение на тестовия пример


В началото редиците са hel o i (Цената на 3 редици е 3). След това всяка от 11-те
инструкция прави. Първата редица е автоматично активна:
3 3
1. Изпечатай “he”. Първата редица става lhe. Цената е ⌊ ⌋+ ⌊ ⌋ =3+1.
1 2
3
2. Изпечатай “l”. Първата редица става hel. Цената е ⌊ ⌋=3.
1
3. Премести циклично надясно. Първата редица става lhe. Цената е 2.
3
4. Изпечатай “l”. Първата редица става hel. Цената е ⌊ ⌋=3.
1
5. Смени активната редица на втората. Цената е 4.
3
6. Изпечатай “o”. Втората редица става o. Цената е ⌊ ⌋=3.
1
7. Смени активната редица на първата. Цената е 4.
8. Сложи първия печат от първата редица върху помощния стек. Първата
редица става el, а помощния стек h . Цената е 5.
9. Смени активната редица на третата. Цената е 4.
Printing
СЕЗОН 2021/2022 – ПЪРВИ РУНД

10. Сложи най-горния печат от помощния стек най-отпред на третата редица.


Третата редица става hi, а помощният стек остава празен . Цената е 5.
3 3
11. Изпечатай “hi”. Третата редица става hi. Цената е ⌊ ⌋+ ⌊ ⌋ =3+1.
1 2

Вашето решение ще бъде оценено като сумата от следните неща:


 цената да купите 3 редици
 цените на вашите операции

(4+3+2+3+4+3+4+5+4+5+4) + 3 = 41 + 3 = 44

You might also like