robot

Time limit: 0.2s Memory limit: 4MB Input: robot.in Output: robot.outPoints by default: 10p

Paul dorește să învețe cum să programeze un robot. Pentru început s-a gândit să construiască un robot format dintr-un mâner, 1010 butoane aranjate circular și un ecran. Pe butoane sunt scrise, în ordine crescătoare, cifrele de la 00 la 99, ca în figură.

Un roboprogram va fi format dintr-o secvență de instrucțiuni. Instrucțiunile pot fi:

  • Dp: Mânerul robotului se deplasează spre dreapta cu pp poziții (pp este o cifră)
  • Sp: Mânerul robotului se deplasează spre stânga cu pp poziții (pp este o cifră)
  • A: Este apăsat butonul în dreptul căruia se află mânerul robotului și pe ecran apare cifra scrisă pe buton
  • T: Terminarea programului (se utilizează o singură dată la final și este precedată de cel puțin o instrucțiune AA)

Inițial mânerul robotului este plasat în dreptul butonului 00, iar ecranul este gol. De exemplu, în urma executării roboprogramului D4AS1AAD6AT robotul apasă butoanele pe care sunt scrise cifrele 44, 33, 33, 99, iar pe ecran va apărea 43394339.

Cerință

Să se scrie un program care rezolvă următoarele cerințe:

  • citește un roboprogram și determină numărul de cifre afișate pe ecran după executarea roboprogramului;
  • citește un roboprogram și determină cifrele afișate pe ecran după executarea roboprogramului;
  • citește un număr natural NN și construiește un roboprogram de lungime minimă prin executarea căruia pe ecran se va obține numărul NN; deoarece robotului îi place să se deplaseze în special spre dreapta, dacă există mai multe roboprograme de lungime deplasare minimă, se va afișa roboprogramul cu număr maxim de instrucțiuni DD.

Date de intrare

Fișierul de intrare robot.in conține pe prima linie un număr natural CC, reprezentând cerința care urmează să fie rezolvată (11, 22 sau 33). Dacă C=1C = 1 sau C=2C = 2, pe a doua linie a fișierului se află un roboprogram. Dacă C=3C = 3, pe a doua linie a fișierului de intrare se află numărul natural NN.

Date de ieșire

Fișierul de ieșire robot.out va conține o singură linie.

Dacă C=1C = 1, pe prima linie se va scrie un număr natural reprezentând numărul de cifre afișate pe ecran după executarea roboprogramului din fișierul de intrare.
Dacă C=2C = 2, pe prima linie vor fi scrise cifrele afișate pe ecran în urma executării roboprogramului din fișierul de intrare.
Dacă C=3C = 3, pe prima linie va fi scris roboprogramul solicitat de cerința 33.

Restricții și precizări

  • 0N1090 \leq N \leq 10^9;
  • Lungimea roboprogramului citit din fișierul de intrare sau scris în fișierul de ieșire este cel mult 10001000 de caractere.
  • Dacă mânerul este plasat în dreptul butonului 00 și se deplasează spre dreapta, se va îndrepta către butonul 11; dacă deplasarea este spre stânga, se va îndrepta către butonul 99.
  • Pentru rezolvarea corectă a primei cerințe se acordă 1010 puncte, pentru rezolvarea corectă a celei de a doua cerințe se acordă 3030 de puncte, iar pentru rezolvarea corectă a celei de a treia cerințe se acordă 5050 de puncte. 1010 puncte se acordă din oficiu.

Exemplul 1

robot.in

1
D1AD2AS1AT

robot.out

3

Explicație

C=1C = 1, pentru acest test se rezolvă cerința 11.

Se afișează pe ecran 33 cifre (132132)

Exemplul 2

robot.in

2
S0AD2AS1AT

robot.out

021

Explicație

C=2C = 2, pentru acest test se rezolvă cerința 22.

Mânerul robotului se deplasează cu 00 unități la stânga, deci rămâne în dreptul butonului 00 și apasă, apoi se deplasează 22 unități spre dreapta și ajunge în dreptul butonului 22, apasă, apoi se deplasează 11 unitate la stânga și ajunge în dreptul butonului 11 și apasă acest buton ⇒ 021021.

Exemplul 3

robot.in

3
19332

robot.out

D1AS2AD4AAS1AT

Explicație

C=3C = 3, pentru acest test se rezolvă cerința 33. Pentru a afișa cifra 11, mânerul robotului se deplasează 1 unitate la dreapta după care apasă (D1A). Pentru a afișa cifra 99, din poziția curentă mânerul robotului se deplasează 22 unități la stânga și apasă (S2A). Pentru a afișa cifra 33, din poziția curentă mânerul robotului se deplasează 44 unități la dreapta după care apasă (D4A). Pentru a afișa a doua cifra 33, mânerul robotului rămâne în poziția curentă și apasă butonul. Pentru a afișa cifra 22, din poziția curentă mânerul robotului se deplasează 11 unitate la stânga după care apasă (S1A). Programul se termină cu instrucțiunea T ⇒ D1AS2AD4AAS1AT

Log in or sign up to be able to send submissions!