Sunteți pe pagina 1din 3

Olimpiada Societăt, ii pentru Excelent, ă s, i Performant, ă ı̂n Informatică

Etapa Judet, eană, 14 martie 2021


Clasele XI-XII

Problema dreptunghi
Fisier intrare: standard input
Fisier iesire: standard output

Avem la dispozit, ie un dreptunghi de dimensiuni N × M . Ne este util ca dreptunghiul nostru să se


asemene cu o matrice, de aceea vom considera că are N linii s, i M coloane. Vom segmenta si numerota
dreptunghiul nostru după un anumit cod C. Prin segmentare se ı̂nt, elege trasarea unei linii orizontale sau
verticale la o anumită pozit, ie k, ce va despărt, i dreptunghiul nostru ı̂n alte două dreptunghiuri mai mici:
• de dimensiuni k × M (cel de sus) s, i (N − k) × M (cel de jos) – ı̂n cazul unei linii (H)orizontale,
operat, ie codificată prin Hk
• de dimensiuni N × k (cel din stânga) s, i N × (M − k) (cel din dreapta) – ı̂n cazul unei linii V erticale,
operat, ie codificată prin V k
Numerotarea dreptunghiului se realizează cu numerele naturale 1, 2, 3, ..., ı̂n această ordine.
Codul C pentru segmentarea s, i numerotarea unui dreptunghi se defines, te recursiv. Dacă C1 si C2 sunt
coduri de segmentare s, i numerotare, atunci:
• ∗ – ı̂n fiecare căsut, ă a dreptunghiului se va scrie valoarea curentă a numerotării. După aceea,
această valoare este incrementată pentru a fi folosită de o ulterioară operat, ie de tipul *;
• HkC1 C2 – se trasează linia orizontală la pozit, ia k, se segmentează s, i numerotează dreptunghiul
de sus conform codului C1 , apoi se continuă cu segmentarea s, i numerotarea dreptunghiului de jos
conform codului C2 ;
• V kC1 C2 – se trasează linia verticală la pozit, ia k, se segmentează s, i numerotează dreptunghiul
din stânga conform codului C1 , apoi se continuă cu segmentarea s, i numerotarea dreptunghiului din
dreapta conform codului C2 .
De exemplu, dreptunghiul de dimensiuni 8×6 (8 linii, 6 coloane) segmentat s, i numerotat conform codului
C = H5H3V 2 ∗ ∗V 3 ∗ ∗V 5V 2 ∗ ∗∗, va arăta ca ı̂n Figura 1.

Un cod de segmentare s, i numerotare C este valid pentru un dreptunghi


de dimensiuni N × M dacă s, i numai dacă pentru fiecare operat, ie de tipul
HkC1 C2 s, i de tipul V kC1 C2 din cadrul lui C, pozit, ia k la care se trage linia
orizontală, sau verticală respectiv, se află strict ı̂n interiorul dreptunghiului
curent (adică pe ambele părt, i ale liniei trasate există cel put, in o linie si
cel put, in o coloană rămase care vor fi ulterior numerotate conform definit, iei
recursive a codului C).
Un cod de segmentare s, i numerotare C valid pentru un dreptunghi de dimen-
siuni N × M generează mai multe subdiviziuni (dreptunghiuri mai mici)
delimitate de liniile orizontale s, i verticale trasate ı̂n cadrul lui C. De ex-
emplu, pentru dreptunghiul din Figura 1, codul C din exemplul de mai sus Figure 1: Dreptunghi de
generează 7 subdiviziuni. dimensiuni 8 × 6.
Codul C nu este unic determinat. Pentru dreptunghiul segmentat s, i numerotat din Figura 1 există 4
coduri echivalente, pe care le scriem ı̂n ordine lexicografică ı̂n cele ce urmează:
1. H3V 2 ∗ ∗H2V 3 ∗ ∗V 2 ∗ V 3 ∗ ∗
2. H3V 2 ∗ ∗H2V 3 ∗ ∗V 5V 2 ∗ ∗∗
3. H5H3V 2 ∗ ∗V 3 ∗ ∗V 2 ∗ V 3 ∗ ∗
4. H5H3V 2 ∗ ∗V 3 ∗ ∗V 5V 2 ∗ ∗∗

1
Olimpiada Societăt, ii pentru Excelent, ă s, i Performant, ă ı̂n Informatică
Etapa Judet, eană, 14 martie 2021
Clasele XI-XII

Pentru stabilirea ordinii lexicografice a două codificări, fiecare informat, ie compactă ce face parte din
secvent, ă se va considera entitate separată: adică simbolurile H, V , ∗ de tip caracter, respectiv numerele
k de tip ı̂ntreg, indiferent de numărul de cifre din care sunt formate.
La nivel de caractere ordinea lexicografică este H < V < ∗. Numerele se vor compara ı̂n funct, ie de
valoarea lor, de exemplu 1 < 7 < 12. Vom considera că un caracter este mai mic lexicografic decât un
număr ı̂ntreg.
De exemplu, următoarele două coduri echivalente sunt scrise ı̂n ordine lexicografică:
1. V 7 ∗ V 6 ∗ ∗
2. V 13V 7 ∗ ∗∗
s, i corespund dreptunghiului de mai jos:

Cerint, ă
Se dă un cod de segmentare s, i numerotare s, i se cere să se afle:
1. numărul de subdiviziuni pe care acesta le generează;
2. dimensiunile unui dreptunghi de arie minimă pentru care acest cod este valid;
3. numărul de codificări distincte modulo 1 000 000 007, echivalente cu codul citit (ı̂n acest număr
va fi inclus s, i codul init, ial);
4. primul cod ı̂n ordine lexicografică echivalent cu cel dat.

Date de intrare
De la intrarea standard se vor citi:
• de pe prima linie valoarea lui P ;
• de pe linia următoare un s, ir de caractere reprezentând codul de segmentare s, i numerotare C.

Date de ies, ire


• Dacă valoarea citită pentru P este 1, atunci la ies, irea standard se va tipări numărul de
subdiviziuni pe care codul C le generează;
• Dacă valoarea citită pentru P este 2, atunci la ies, irea standard se vor tipări două numere N
s, i M separate printr-un spat, iu, dimensiunile unui dreptunghi de arie minimă pentru care codul C
citit este valid. În caz că există mai multe se acceptă oricare;
• Dacă valoarea citită pentru P este 3, atunci la ies, irea standard se va tipări numărul de codificări
distincte modulo 1 000 000 007 echivalente cu codul citit (in acest număr va fi inclus s, i codul C
citit).
• Dacă valoarea citită pentru P este 4, atunci la ies, irea standard se va tipări primul cod ı̂n
ordine lexicografică echivalent cu cel dat;

2
Olimpiada Societăt, ii pentru Excelent, ă s, i Performant, ă ı̂n Informatică
Etapa Judet, eană, 14 martie 2021
Clasele XI-XII

Restrict, ii s, i precizări
• 0 < lungimea codului C (număr de caractere) < 350
• Pentru teste ı̂n valoare de 14 puncte avem P = 1.
• Pentru teste ı̂n valoare de 21 de puncte avem P = 2.
• Pentru teste ı̂n valoare de 29 de puncte avem P = 3.
• Pentru teste ı̂n valoare de 36 de puncte avem P = 4.

Exemplu 1
stdin stdout
1 7
H3V2**H2V3**V2*V3**

Explicat, ie: În urma segmentării se obt, in 7 dreptunghiuri.

Exemplu 2
stdin stdout
2 6 6
H3V2**H2V3**V2*V3**
Explicat, ie: Cel mai mic dreptunghi pentru care codul este valid are 6 linii s, i 6 coloane.

Exemplu 3
stdin stdout
3 4
H3V2**H2V3**V2*V3**
Explicat, ie: Numărul codurilor echivalente cu cel citit este 4 (vezi exemplul din enunt, ).

Exemplu 4
stdin stdout
4 H3V2**H2V3**V2*V3**
H3V2**H2V3**V2*V3**
Explicat, ie: Primul cod ı̂n ordine lexicografică echivalent cu cel citit este H3V 2 ∗ ∗H2V 3 ∗ ∗V 2 ∗ V 3 ∗ ∗.

S-ar putea să vă placă și