Minish

Time limit: 0.2s Memory limit: 512MB Input: minish.in Output: minish.out

Se va prezenta în continuare un limbaj minimal de programare fictiv: minishell.

Documentație

Variabile

Acest limbaj admite 26 de variabile, notate: a,b,,za, b, \ldots, z.

La începutul unui program, toate variabilele sunt inițializate cu 00.

Într-un program valid, variabilele pot reține doar valori întregi din intervalul [0,231)[0, 2^{31}).

Operații

  • Atribuire constantă:
    • Atribuie unei variabile oarecare o valoare constantă.
    • Exemple: a=6, t=0, z=2147483647;
    • Valoarea constantă atribuită trebuie să fie cuprinsă în intervalul [0,231)[0, 2^{31}).
  • Atribuire și adunare:
    • Schimbă valoarea unei variabile cu suma dintre aceasta și o altă variabilă la alegere.
    • Exemple: a+=b, t+=c, m+=m;
    • Variabilele folosite în această operație trebuie să aparțină celor 2626 menționate mai sus.

Exemplu de program

a=1
c+=a
b=2
b+=c
c+=c
a=7

După rularea acestui program, aa conține valoarea 77, bb conține valoarea 33, cc conține valoarea 22, și variabilele d,,zd, \ldots, z conțin valoarea 00.

Cerință

Se dă un vector val[a],,val[z]val[a], \ldots, val[z]. Să se construiască un program minishell care folosește cât mai puține atribuiri constante și care, prin rularea sa, face ca variabilele a,,za, \ldots, z să conțină valorile val[a],,val[z]val[a], \ldots, val[z].

Date de intrare

Fișierul de intrare minish.in va conține numerele val[a],,val[z]val[a], \ldots, val[z].

Date de ieșire

Fișierul de ieșire minish.out va conține un program minishell corect alcătuit, care rezolvă cerința. Programul afișat poate conține linii goale, dar nu are voie să conțină spații.

Restricții și precizări

  • 0val[a],,val[z]<2310 \leq val[a], \ldots, val[z] < 2^{31}.
  • Fiecare linie afișată trebuie sa conțină exact o singură operație. De asemenea, ea trebuie să nu conțină spații.
  • Se garantează că cel puțin o valoare dintre val[a],,val[z]val[a], \ldots, val[z] este nenulă.
  • Se poate demonstra că întotdeauna există o soluție validă care respectă restricțiile.
  • Notăm cu cnt numărul de elemente nenule din vectorul valval.
# Scor Restricții
1 5 0val[a],,val[z]10 \leq val[a], \ldots, val[z] \leq 1
2 15 Cel puțin una dintre valorile val[a],,val[z]val[a], \ldots, val[z] este 1
3 10 0val[a],,val[z]<2120 \leq val[a], \ldots, val[z] < 2^{12}, cnt=2cnt = 2
4 10 cnt=2cnt = 2
5 10 0val[a],,val[z]<2200 \leq val[a], \ldots, val[z] < 2^{20}
6 15 val[a]=val[b]1val[a] = val[b] - 1
7 35 Fără restricții suplimentare.

Punctare

Problema admite punctaje parțiale. Punctajul procentual pentru un test este dat de formula

1KK×{0,N>10 000,20+1200(10 000N),2 000<N10 000,60+4167(2 000N),330<N2 000,100,N330.\frac{1}{K \sqrt{K}} \times \begin{cases} 0, & N > 10 \ 000, \\ 20 + \frac{1}{200}(10 \ 000 - N), & 2 \ 000 < N \leq 10 \ 000,\\ 60 + \frac{4}{167}(2 \ 000 - N), & 330 < N \leq 2 \ 000,\\ 100, & N \leq 330. \end{cases}

unde KK reprezintă numărul de atribuiri constante din program, și NN reprezintă numărul de linii de cod al programului din output.

Veți primi punctaj pe un test numai dacă:

  • Programul este corect alcătuit.
  • După execuția întregului program, variabilele conțin valorile cerute.

Exemplu

minish.in

1 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

minish.out

a=1
b+=a
b+=a
c+=a
c+=a
c+=a
z+=a

Explicație

Acesta reprezintă un program valid care rezolvă problema.

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