#2382
După multe năzbâtii făcute împreună, Alex şi Cipri nu mai au voie să se întâlnească. Alex – strategul echipei – a plănuit o nouă poznă şi a decis să-i transmită prietenului său planul de luptă, constând din anumite cuvinte dintr-un mesaj m[0]. Pentru a nu fi descoperiți, i-a trimis ulterior mai multe mesaje m[1], m[2], … lui Cipri, acesta trebuind să le descifreze folosind convenția secretă stabilită la începutul prieteniei lor și să “acționeze”. Fiecare mesaj m[i] este format din mai multe cuvinte, separate prin câte un spațiu, numerotate cu valori consecutive, începând de la 1.
Pentru a afla planul, Cipri trebuie să găsească cea mai mare valoare i ≥ 0 astfel încât mesajele m[i] și m[0] să conțină cel puțin un cuvânt identic având același număr de ordine în ambele mesaje. Din m[0] se păstrează toate cuvintele care se găsesc și în mesajul m[i] cu același număr de ordine ca în m[0].
Cuvintele păstrate trebuie ordonate în ordine descrescătoare lexicografică a puterii lor. Puterea cuvântului cu numărul de ordine j în m[0] este egală cu șirul ordonat descrescător al indicilor mesajelor în care apare cu același număr de ordine ca în m[0]. Astfel, un cuvânt care a apărut cu numărul de ordine 2 în mesajele m[0], m[6] și m[8] are puterea {8,6,0}. Dacă două cuvinte au aceeași putere, vor rămâne în ordinea din mesajul inițial. Lui Cipri nu i-a mai rămas decât să citească fiecare cuvânt de la dreapta la stânga şi a descifrat tot planul de luptă Cunoscând mesajele transmise de Alex, ajutaţi-l pe Cipri să descifreze planul de luptă conform convenţiei secrete.
ONI 2010
| Problema | mesaje | Operații I/O |
mesaje.in/mesaje.out
|
|---|---|---|---|
| Limita timp | 0.1 secunde | Limita memorie |
Total: 2 MB
/
Stivă 1 MB
|
| Id soluție | #61506142 | Utilizator | |
| Fișier | mesaje.cpp | Dimensiune | 2.56 KB |
| Data încărcării | 30 Noiembrie 2025, 15:58 | Scor/rezultat | 0 puncte |
mesaje.cpp: In function 'void read(std::vector<std::vector<std::basic_string<char> > >&)': mesaje.cpp:17:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] while(i < s.length()){ ^ mesaje.cpp:19:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] while(i < s.length() && s[i] != ' '){ ^ mesaje.cpp: In function 'int find_best_row(std::vector<std::vector<std::basic_string<char> > >&)': mesaje.cpp:32:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(int i = 0; i < words[0].size(); i ++){ ^ mesaje.cpp:38:47: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if(best_row == words.size() - 1){ ^ mesaje.cpp: In function 'int find_num_words(std::vector<std::vector<std::basic_string<char> > >&, int&)': mesaje.cpp:50:45: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(int i = 0; i < words[best_row].size(); i ++){ ^ mesaje.cpp: In function 'void decypher(std::vector<std::vector<std::basic_string<char> > >&)': mesaje.cpp:63:42: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(int i = 0; i < words[0].size(); i ++){ ^ mesaje.cpp:78:42: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(int i = 0; i < words[0].size(); i ++){ ^ mesaje.cpp:81:42: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(int i = 0; i < words[0].size(); i ++){ ^ mesaje.cpp:88:33: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(int i = 0; i < res.size(); i ++){ ^ mesaje.cpp:61:9: warning: unused variable 'num' [-Wunused-variable] int num = find_num_words(words, best_row); ^
| Test | Timp | Mesaj evaluare | Scor posibil | Scor obținut | ||
|---|---|---|---|---|---|---|
| 0 | 0.004 secunde | Caught fatal signal 11 | 10 | 0 | ||
| 1 | 0 secunde | Raspuns gresit. | 10 | 0 | ||
| 2 | 0 secunde | Raspuns gresit. | 10 | 0 | ||
| 3 | 0 secunde | Raspuns gresit. | 10 | 0 | ||
| 4 | 0 secunde | Raspuns gresit. | 10 | 0 | ||
| 5 | 0 secunde | Raspuns gresit. | 10 | 0 | ||
| 6 | 0.008 secunde | Raspuns gresit. | 10 | 0 | ||
| 7 | 0.012 secunde | Caught fatal signal 11 | 10 | 0 | ||
| 8 | 0.016 secunde | Caught fatal signal 11 | 10 | 0 | ||
| 9 | 0.016 secunde | Caught fatal signal 11 | 10 | 0 | ||
| Punctaj total | 0 | |||||
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema mesaje face parte din prima categorie. Soluția propusă de tine va fi evaluată astfel:
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ă.