Detalii evaluare #53997659

Rezumat problemă

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:

  1. dacă matricea M are o singură linie şi o singură coloană atunci CM conţine numai caracterul memorat în matrice;
  2. dacă toate elementele matricei sunt identice atunci întreaga matrice M se comprimă şi CM este şirul kc, unde k reprezintă numărul de caractere din matrice, iar c caracterul memorat;
  3. dacă matricea este formată din caractere diferite şi are cel puţin două linii şi două coloane atunci:
    • matricea este împărţită în 4 submatrice A, B, C, D după cum este ilustrat în figura alăturată, unde coordonatele colţului stânga sus ale submatricei A sunt (x1,y1), iar coordonatele colţului dreapta jos sunt ((x2+x1)/2,(y2+y1)/2);
    • CM este şirul *CACBCCCD unde CA, CB, CC, CD sunt şirurile de caractere obţinute, în ordine, prin compresia matricelor A, B, C, D utilizând acelaşi algoritm;
  4. dacă matricea este formată din caractere diferite, are o singură linie şi mai multe coloane atunci CM este şirul *CACB unde A, B, CA, CB au semnificaţia descrisă la punctul 3.;
  5. dacă matricea este formată din caractere diferite, are mai multe linii şi o singură coloană atunci CM este şirul *CACC unde A, C, CA, CC au semnificaţia descrisă la punctul 3.;

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:

  1. numărul de împărţiri care au fost necesare pentru obţinerea textului compresat;
  2. matricea iniţială din care provine textul compresat.

Detalii

Problema Compresie Operații I/O compresie.in/compresie.out
Limita timp 0.5 secunde Limita memorie Total: 4 MB / Stivă 3 MB
Id soluție #53997659 Utilizator anabela iordache (anabela55)
Fișier compresie.cpp Dimensiune 2.42 KB
Data încărcării 17 Noiembrie 2024, 13:38 Scor / rezultat Eroare de compilare

Evaluare


Mesaj compilare

compresie.cpp: In function 'int main()':
compresie.cpp:29:19: error: expected primary-expression before 'double'
     n =(int) sqrt(double) n);

                   ^
compresie.cpp:29:27: error: expected ';' before 'n'
     n =(int) sqrt(double) n);

                           ^
compresie.cpp: In function 'void calcDim()':
compresie.cpp:42:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(i = 0; i < strlen(s); )

                            ^
compresie.cpp: In function 'int formareNr(int)':
compresie.cpp:66:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while(poz < strlen(s) && s[poz] >= '0' && s[poz] <= '9')

                         ^
compresie.cpp: In function 'void divide(short int, short int, short int, short int)':
compresie.cpp:90:46: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(x1 <= x2 && y1 <= y2 && poz < strlen(s))

                                              ^

Cum funcționează evaluarea?

www.pbinfo.ro permite evaluarea a două tipuri de probleme:

  • probleme la care rezolvarea presupune scrierea unui program complet
  • probleme la care rezolvarea presupune scrierea unei secvențe de program - câteva instrucțiuni, o listă de declarații, una sau mai multe funcții, etc.

Problema Compresie face parte din prima categorie. Soluția propusă de tine va fi evaluată astfel:

  • Programul sursă este compilat folosind compilatorul corespunzător. Dacă în urma compilării se obțin erori sau avertismente, acestea sunt afișate în această pagină.
  • Dacă programul a fost compilat, executabilul obținut va fi rulat, furnizându-i-se unul sau mai multe seturi de date de intrare, în concordanță cu restricțiile specifice problemei. Pentru fiecare set de date se obține un anumit punctaj, în raport cu corectitudinea soluției tale.

Suma punctajelor acordate pe testele utilizate pentru verificare este 100. Astfel, soluția ta poate obține cel mult 100 de puncte, caz în care se poate considera corectă.