Se consideră un text memorat într-o matrice M, definită prin coordonatele colţului stânga sus (x1,y1) şi coordonatele colţului dreapta jos (x2,y2).
Prin aplicarea unui algoritm de compresie, matricei M i se asociază un şir de caractere, notat CM. Şirul de caractere CM este construit prin aplicarea următoarelor reguli:
- dacă matricea
Mare o singură linie şi o singură coloană atunciCMconţine numai caracterul memorat în matrice; - dacă toate elementele matricei sunt identice atunci întreaga matrice
Mse comprimă şiCMeste şirulkc, undekreprezintă numărul de caractere din matrice, iarccaracterul memorat; - dacă matricea este formată din caractere diferite şi are cel puţin două linii şi două coloane atunci:
matricea este împărţită în 4submatriceA,B,C,Ddupă cum este ilustrat în figura alăturată, unde coordonatele colţului stânga sus ale submatriceiAsunt(x1,y1), iar coordonatele colţului dreapta jos sunt((x2+x1)/2,(y2+y1)/2);CMeste şirul*CACBCCCDundeCA,CB,CC,CDsunt şirurile de caractere obţinute, în ordine, prin compresia matricelorA,B,C,Dutilizând acelaşi algoritm;
- dacă matricea este formată din caractere diferite, are o singură linie şi mai multe coloane atunci
CMeste şirul*CACBundeA,B,CA,CBau semnificaţia descrisă la punctul 3.; - dacă matricea este formată din caractere diferite, are mai multe linii şi o singură coloană atunci
CMeste şirul*CACCundeA,C,CA,CCau semnificaţia descrisă la punctul 3.;
Cerinţă
Dat fiind şirul de caractere CM ce se obţine în urma aplicării algoritmului de compresie asupra unei matrice M de dimensiune NxN să se determine:
- numărul de împărţiri care au fost necesare pentru obţinerea textului compresat;
- matricea iniţială din care provine textul compresat.
Date de intrare
Fișierul de intrare compresie.in conţine pe prima linie un şir de caractere ce reprezintă textul compresat.
Date de ieșire
Fișierul de ieșire compresie.out va conține:
- pe prima linie un număr natural ce reprezintă numărul
nrde împărţiri care au fost necesare pentru obţinerea textului compresat; - pe următoarele
Nlinii se găsesc câteNcaractere, litere mici ale alfabetului englez, neseparate prin spații, ce reprezintă, în ordine, liniile matricei iniţiale.
Restricții și precizări
2 ≤ N ≤ 10000 ≤ nr ≤ 10000002 ≤lungimea şirului compresat≤ 1000000- Textul memorat iniţial în matricea
Mconţine numai caractere din mulţimea literelor mici{a...z}.
Exemplul 1
compresie.in
*4b*bbab4a*abbb
compresie.out
3 bbbb bbab aaab aabb
Explicație
Au fost efectuate 3 împărţiri:
- \( M = * \left( \begin{array}{cc}
b & b \\
b & b \end{array} \right)
\left( \begin{array}{cc}
b & b \\
a & b \end{array} \right)
\left( \begin{array}{cc}
a & a \\
a & a \end{array} \right)
\left( \begin{array}{cc}
a & b \\
b & b \end{array} \right) \) - \(
\left( \begin{array}{cc}
b & b \\
a & b \end{array} \right)
= * (b)(b)(a)(b) \) - \(
\left( \begin{array}{cc}
a & b \\
b & b \end{array} \right)
= * (a)(b)(b)(b) \)
Exemplul 2
compresie.in
*4a*ab*aba
compresie.out
3 aaa aab aba
Explicație
Au fost efectuate 3 împărţiri:
- \( M = * \left( \begin{array}{cc}
a & a \\
a & a \end{array} \right)
\left( \begin{array}{c}
a \\
b \end{array} \right)
\left( \begin{array}{cc}
a & b \end{array} \right)
\left( \begin{array}{c}
a \end{array} \right) \) - \(
\left( \begin{array}{c}
a \\
b \end{array} \right)
= * (a)(b) \) - \(
\left( \begin{array}{cc}
a & b \end{array} \right)
= * (a)(b) \)