ConcursC++17

expresii

Definim o expresie ca fiind un șir de caractere ee care respectă una dintre următoarele:

  • e=e = x;
  • ee reprezintă un număr natural (constantă); (ex. e∈{e \in \{1,, 2,, 200,… }, \dots\})
  • e=[e1,e2]e = [e_1, e_2] sau e=(e1,e2)e = (e_1, e_2), unde e1e_1, e2e_2 sunt (sub-)expresii. Aici, (⋅,⋅)(\cdot, \cdot) semnifică cel mai mare divizor comun al două numere, iar [⋅,⋅][\cdot, \cdot] semnifică cel mai mic multiplu comun al două numere. De exemplu, avem că (6,8)=2(6, 8) = 2, [6,8]=24[6, 8] = 24.


De exemplu, x, 13, (5,2), [3,[x,(14,1)]], [x,x] sunt expresii, pe când 0, (5, 2, 3), [x, 2) nu sunt expresii. Observați că expresiile nu conțin niciodată spații.

Pentru o expresie ee dată și un număr natural pozitiv aa, definim eval(e,a)\textit{eval}(e, a) ca fiind rezultatul evaluării expresiei ee, unde tuturor aparițiilor lui xx le vor fi asociate valoarea aa. De exemplu:

eval(eval(([x,3],[x,2]),10)=, 10) = ([10,3],[10,2]) == (30,10) == 10

eval(eval((6,14),5)=, 5) = (6, 14) == 2

eval(eval(x,12)=, 12) = 12


Dându-se o expresie ee și două numere naturale a,ba, b, să se calculeze eval(e,a)+eval(e,a+1)+…+eval(e,b)eval(e, a) + eval(e, a + 1) + \ldots + eval(e, b).

Rezultatul se va afișa modulo 109+710^9 + 7.

Date de intrare

Fișierul de intrare expresii.in conține pe prima linie o expresie ee. Pe a doua linie se găsesc numerele a,ba, b, separate prin spațiu.

Date de ieșire

Fișierul de ieșire expresii.out va conține un număr întreg reprezentând valoarea cerută.

Restricții și precizări

  • În tabelul ce urmează, ∣e∣|e| reprezintă lungimea expresiei ee (numărul de caractere), iar max⁡(e)\max(e) reprezintă constanta de valoare maximă din ee (sau 00, dacă ee nu conține constante).
#PunctajRestricții
191≤a≤b≤1 0001 \leq a \leq b \leq 1\,000 și e=(x,t)e = (x, t), unde 1≤t≤1 0001 \leq t \leq 1\,000
2101≤a≤b≤1 0001 \leq a \leq b \leq 1\,000, 1≤∣e∣≤1 0001 \leq \lvert e \rvert \leq 1\,000, 0≤max⁡(e)≤1 0000 \leq \max(e) \leq 1\,000 și expresia ee nu conține paranteze pătrate []
3151≤a≤b≤401 \leq a \leq b \leq 40, 1≤∣e∣≤1 0001 \leq \lvert e \rvert \leq 1\,000, 0≤max⁡(e)≤400 \leq \max(e) \leq 40
4171≤a≤b≤1051≤∣e∣≤1050≤max⁡(e)≤1051 \leq a \leq b \leq 10^5 \quad 1 \leq \lvert e \rvert \leq 10^5 \quad 0 \leq \max(e) \leq 10^5 și toate constantele din ee sunt puteri de 22
5171≤a≤b≤1 0001≤∣e∣≤1 0000≤max⁡(e)≤1 0001 \leq a \leq b \leq 1\,000 \quad 1 \leq \lvert e \rvert \leq 1\,000 \quad 0 \leq \max(e) \leq 1\,000
6101≤a=b≤100 0001≤∣e∣≤250 0000≤max⁡(e)≤100 0001 \leq \bm{a = b} \leq 100\,000 \quad 1 \leq \lvert e \rvert \leq 250\,000 \quad 0 \leq \max(e) \leq 100\,000
7141≤a≤b≤100 0001≤∣e∣≤250 0000≤max⁡(e)≤100 0001 \leq a \leq b \leq 100\,000 \quad 1 \leq \lvert e \rvert \leq 250\,000 \quad 0 \leq \max(e) \leq 100\,000
881≤a≤b≤250 0001≤∣e∣≤2 000 0000≤max⁡(e)≤250 0001 \leq a \leq b \leq 250\,000 \quad 1 \leq \lvert e \rvert \leq 2\,000\,000 \quad 0 \leq \max(e) \leq 250\,000

Exemplul 1

expresii.in

(x,6)
4 4

expresii.out

2

Explicație

Pentru primul exemplu, (4,6)=2(4, 6) = 2.

Exemplul 2

expresii.in

[x,6]
1 6

expresii.out

66

Explicație

Pentru al doilea exemplu, [1,6]+[2,6]+[3,6]+[4,6]+[5,6]+[6,6]=6+6+6+12+30+6=66[1, 6] + [2, 6] + [3, 6] + [4, 6] + [5, 6] + [6, 6] = 6 + 6 + 6 + 12 + 30 + 6 = 66.

Exemplul 3

expresii.in

(12,(x,(8,6)))
3 6

expresii.out

6

Exemplul 4

expresii.in

([x,3],[x,2])
10 10

expresii.out

10

Exemplul 5

expresii.in

[([(x,5),2],[12,5]),(x,16)]
28 33

expresii.out

36

Explicație

Pentru ultimul exemplu, răspunsurile pentru fiecare valoare din interval sunt 4,2,10,2,16,24, 2, 10, 2, 16, 2 (în această ordine).

Atenție! Exemplele 22, 33, 44 și 55 nu respectă constrângerile subtask-ului 11. Exemplele 22, 44 și 55 nu respectă constrângerile subtask-ului 22. Exemplele 22, 33 și 55 nu respectă constrângerile subtask-ului 66.

Sursă și autori

OSEPI 2021, clasele 10. Lucian Bicsi, Tamio Vesa-Nakajima.

Enunț din Kilonova, sub licența CC-BY-NC-SA-4.0, conform politicii sursei. Adaptări de prezentare și tipografie. Exemplele, formulele și figurile originale sunt păstrate.

RÂNDUL TĂU

Trimite o soluție

Editor de cod

Setul original de teste și regulile de punctare sunt în curs de verificare. Trimiterea pentru evaluare va fi disponibilă după această verificare.

Se verifică autentificarea…

Un pas, apoi următorul.Înapoi sus ↑