Detalii evaluare #40909585

Rezumat problemă

#1785 MZ

Fericit că s-a calificat la ONI, XORin vrea să sărbătorească făcând cât mai mult zgomot. Deoarece e programator, acesta s-a gândit să automatizeze felul în care face zgomot.

Pentru a face zgomot el folosește o placă cu circuite de diverse intensități. Placa poate fi reprezentată sub forma unei matrice cu N linii și M coloane. Fiecare celulă din matrice are o intensitate între 0 și 9 (o celulă cu intensitatea 0 corespunde unei zone goale, fără nici un circuit).

Un circuit începe într-o celulă a matricei și se termină în altă celulă, fiind o succesiune de celule adiacente de aceeași intensitate de la un capăt la celălalt al circuitului, asemenea unui drum pe matrice între cele două celule. Două celule se consideră adiacente dacă au o latură comună, deci o celulă e adiacentă cu maxim patru alte celule.

Placa a fost concepută în așa fel încât să nu apară scurtcircuite, așadar curentul dintr-un circuit poate merge numai într-o singură direcție (cu alte cuvinte, fiecare celulă dintr-un circuit se învecinează cu maxim alte două celule din același circuit). Nu există circuite de aceeași intensitate care să se învecineze.

Zgomotul produs de un circuit este egal cu lungimea lui, adică cu numărul de celule din matrice corespunzătoare circuitului.

Cerințe:

1) Să se afle numărul de circuite.
2) Să se afle valoarea zgomotului maxim care poate fi obținut unind două circuite. Două circuite pot fi unite dacă se poate trage o legătură de la un capăt al unui circuit până la un capăt al celuilalt circuit, numai prin celulele libere ale matricei (de intensitate 0). Legătura trebuie să aibă forma unui circuit. Lungimea circuitului nou creat nu se adaugă la zgomotul produs de cele doua circuite.
3) Să se afișeze placa ce conține legătura care unește două circuite din care se obține zgomotul maxim de la cerința 2. Dacă există mai multe variante, se poate afișa orice placă care conține legătura validă.

Concursul Interjudeţean de Matematică şi Informatică Grigore Moisil, 2016

Detalii

Problema MZ Operații I/O mz.in/mz.out
Limita timp 2.5 secunde Limita memorie Total: 64 MB / Stivă 32 MB
Id soluție #40909585 Utilizator Croitoriu Andrei (Andrei_Croitoriu)
Fișier mz.cpp Dimensiune 4.21 KB
Data încărcării 03 Ianuarie 2023, 14:25 Scor / rezultat Eroare de compilare

Evaluare


Mesaj compilare

mz.cpp:14:5: error: 'index' does not name a type
     index start,finish;

     ^
mz.cpp: In member function 'bool zgomot::operator==(const zgomot&) const':
mz.cpp:17:18: error: 'const struct zgomot' has no member named 'start'
         return a.start==start && a.finish==finish;

                  ^
mz.cpp:17:25: error: 'start' was not declared in this scope
         return a.start==start && a.finish==finish;

                         ^
mz.cpp:17:36: error: 'const struct zgomot' has no member named 'finish'
         return a.start==start && a.finish==finish;

                                    ^
mz.cpp:17:44: error: 'finish' was not declared in this scope
         return a.start==start && a.finish==finish;

                                            ^
mz.cpp: At global scope:
mz.cpp:20:12: error: type/value mismatch at argument 1 in template parameter list for 'template<class _Tp, class _Sequence> class std::queue'
 queue<index>q;

            ^
mz.cpp:20:12: error:   expected a type, got 'index'
mz.cpp:20:12: error: template argument 2 is invalid
mz.cpp:20:14: error: invalid type in declaration before ';' token
 queue<index>q;

              ^
mz.cpp: In function 'bool unite(zgomot, zgomot)':
mz.cpp:61:7: error: request for member 'push' in 'q', which is of non-class type 'int'
     q.push(a.start);

       ^
mz.cpp:61:14: error: 'struct zgomot' has no member named 'start'
     q.push(a.start);

              ^
mz.cpp:62:7: error: request for member 'push' in 'q', which is of non-class type 'int'
     q.push(a.finish);

       ^
mz.cpp:62:14: error: 'struct zgomot' has no member named 'finish'
     q.push(a.finish);

              ^
mz.cpp:63:14: error: request for member 'empty' in 'q', which is of non-class type 'int'
     while(!q.empty())

              ^
mz.cpp:65:13: error: request for member 'front' in 'q', which is of non-class type 'int'
         p=q.front();

             ^
mz.cpp:66:11: error: request for member 'pop' in 'q', which is of non-class type 'int'
         q.pop();

           ^
mz.cpp:71:68: error: 'struct zgomot' has no member named 'start'
             if(in(p1.x,p1.y) && lee[p1.x][p1.y]!=contor && !(p1==a.start) && !(p1==a.finish))

                                                                    ^
mz.cpp:71:86: error: 'struct zgomot' has no member named 'finish'
             if(in(p1.x,p1.y) && lee[p1.x][p1.y]!=contor && !(p1==a.start) && !(p1==a.finish))

                                                                                      ^
mz.cpp:73:27: error: 'struct zgomot' has no member named 'start'
                 if(!(p==a.start) && !(p==a.finish) && (p1==b.start || p1==b.finish))

                           ^
mz.cpp:73:44: error: 'struct zgomot' has no member named 'finish'
                 if(!(p==a.start) && !(p==a.finish) && (p1==b.start || p1==b.finish))

                                            ^
mz.cpp:73:62: error: 'struct zgomot' has no member named 'start'
                 if(!(p==a.start) && !(p==a.finish) && (p1==b.start || p1==b.finish))

                                                              ^
mz.cpp:73:77: error: 'struct zgomot' has no member named 'finish'
                 if(!(p==a.start) && !(p==a.finish) && (p1==b.start || p1==b.finish))

                                                                             ^
mz.cpp:78:23: error: request for member 'push' in 'q', which is of non-class type 'int'
                     q.push(p1);

                       ^
mz.cpp: In function 'int main()':
mz.cpp:105:38: error: no matching function for call to 'std::vector<zgomot>::push_back(<brace-enclosed initializer list>)'
                 v.push_back({s,fi,lg});

                                      ^
mz.cpp:105:38: note: candidates are:
In file included from /usr/include/c++/4.8/vector:64:0,
                 from /usr/include/c++/4.8/bits/random.h:34,
                 from /usr/include/c++/4.8/random:50,
                 from /usr/include/c++/4.8/bits/stl_algo.h:65,
                 from /usr/include/c++/4.8/algorithm:62,
                 from /usr/include/i386-linux-gnu/c++/4.8/bits/stdc++.h:64,
                 from mz.cpp:1:
/usr/include/c++/4.8/bits/stl_vector.h:901:7: note: void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = zgomot; _Alloc = std::allocator<zgomot>; std::vector<_Tp, _Alloc>::value_type = zgomot]
       push_back(const value_type& __x)
       ^
/usr/include/c++/4.8/bits/stl_vector.h:901:7: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const value_type& {aka const zgomot&}'
/usr/include/c++/4.8/bits/stl_vector.h:919:7: note: void std::vector<_Tp, _Alloc>::push_back(std::vector<_Tp, _Alloc>::value_type&&) [with _Tp = zgomot; _Alloc = std::allocator<zgomot>; std::vector<_Tp, _Alloc>::value_type = zgomot]
       push_back(value_type&& __x)
       ^
/usr/include/c++/4.8/bits/stl_vector.h:919:7: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'std::vector<zgomot>::value_type&& {aka zgomot&&}'
mz.cpp:118:7: error: request for member 'push' in 'q', which is of non-class type 'int'
     q.push(a.start);

       ^
mz.cpp:118:14: error: 'struct zgomot' has no member named 'start'
     q.push(a.start);

              ^
mz.cpp:119:7: error: request for member 'push' in 'q', which is of non-class type 'int'
     q.push(a.finish);

       ^
mz.cpp:119:14: error: 'struct zgomot' has no member named 'finish'
     q.push(a.finish);

              ^
mz.cpp:121:11: error: 'struct zgomot' has no member named 'start'
     lee[a.start.x][a.start.y]=lee[a.finish.x][a.finish.y]=1;

           ^
mz.cpp:121:22: error: 'struct zgomot' has no member named 'start'
     lee[a.start.x][a.start.y]=lee[a.finish.x][a.finish.y]=1;

                      ^
mz.cpp:121:37: error: 'struct zgomot' has no member named 'finish'
     lee[a.start.x][a.start.y]=lee[a.finish.x][a.finish.y]=1;

                                     ^
mz.cpp:121:49: error: 'struct zgomot' has no member named 'finish'
     lee[a.start.x][a.start.y]=lee[a.finish.x][a.finish.y]=1;

                                                 ^
mz.cpp:122:14: error: request for member 'empty' in 'q', which is of non-class type 'int'
     while(!q.empty())

              ^
mz.cpp:124:13: error: request for member 'front' in 'q', which is of non-class type 'int'
         p=q.front();

             ^
mz.cpp:125:11: error: request for member 'pop' in 'q', which is of non-class type 'int'
         q.pop();

           ^
mz.cpp:130:76: error: 'struct zgomot' has no member named 'start'
             if(in(p1.x,p1.y) && lee[p1.x][p1.y]>lee[p.x][p.y]+1 && !(p1==a.start) && !(p1==a.finish))

                                                                            ^
mz.cpp:130:94: error: 'struct zgomot' has no member named 'finish'
             if(in(p1.x,p1.y) && lee[p1.x][p1.y]>lee[p.x][p.y]+1 && !(p1==a.start) && !(p1==a.finish))

                                                                                              ^
mz.cpp:132:27: error: 'struct zgomot' has no member named 'start'
                 if(!(p==a.start) && !(p==a.finish) && (p1==b.start || p1==b.finish))

                           ^
mz.cpp:132:44: error: 'struct zgomot' has no member named 'finish'
                 if(!(p==a.start) && !(p==a.finish) && (p1==b.start || p1==b.finish))

                                            ^
mz.cpp:132:62: error: 'struct zgomot' has no member named 'start'
                 if(!(p==a.start) && !(p==a.finish) && (p1==b.start || p1==b.finish))

                                                              ^
mz.cpp:132:77: error: 'struct zgomot' has no member named 'finish'
                 if(!(p==a.start) && !(p==a.finish) && (p1==b.start || p1==b.finish))

                                                                             ^
mz.cpp:135:30: error: request for member 'empty' in 'q', which is of non-class type 'int'
                     while(!q.empty())

                              ^
mz.cpp:136:27: error: request for member 'pop' in 'q', which is of non-class type 'int'
                         q.pop();

                           ^
mz.cpp:142:23: error: request for member 'push' in 'q', which is of non-class type 'int'
                     q.push(p1);

                       ^
mz.cpp:147:14: error: 'struct zgomot' has no member named 'start'
     if(lee[b.start.x][b.start.y]!=1000*1000+1)

              ^
mz.cpp:147:25: error: 'struct zgomot' has no member named 'start'
     if(lee[b.start.x][b.start.y]!=1000*1000+1)

                         ^
mz.cpp:148:13: error: 'struct zgomot' has no member named 'start'
         p=b.start;

             ^
mz.cpp:149:14: error: 'struct zgomot' has no member named 'finish'
     else p=b.finish;

              ^
mz.cpp:150:18: error: 'struct zgomot' has no member named 'start'
     while(!(p==a.start) && !(p==a.finish))

                  ^
mz.cpp:150:35: error: 'struct zgomot' has no member named 'finish'
     while(!(p==a.start) && !(p==a.finish))

                                   ^
mz.cpp:160:19: error: 'struct zgomot' has no member named 'start'
         if(!(p==b.start) && !(p==b.finish))

                   ^
mz.cpp:160:36: error: 'struct zgomot' has no member named 'finish'
         if(!(p==b.start) && !(p==b.finish))

                                    ^

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 MZ 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ă.