#1205
Pe vremea maurilor, transmiterea unor mesaje codificate între două persoane se făcea folosind un cifru numit nod. Cele două persoane alegeau în secret o poveste. Aceasta era scrisă într-o carte folosind litere mici și mari ale alfabetului englez, pe P pagini, numerotate de la 1 la P, fiecare conținând exact R rânduri, numerotate în cadrul fiecărei pagini de la 1 la R, iar fiecare rând fiind format din exact C cuvinte, numerotate în cadrul fiecărui rând de la 1 la C.
Un cuvânt al mesajului de transmis era codificat prin poziția sa în povestea aleasă de cei doi, folosind trei numere scrise cu cifre romane, ce indicau în ordine: numărul paginii, numărul rândului în cadrul paginii, respectiv al cuvântului în cadrul rândului.
Mesajul astfel codificat era scris pe trei linii. Pe prima linie erau scrise numerele paginilor, pe a doua linie numerele rândurilor, iar pe a treia linie erau scrise numerele de ordine ale cuvintelor.
Presupunem că mesajul este format din primul cuvânt de pe al cincilea rând al celei de a doua pagini și din al patrulea cuvânt de pe rândul al doilea al primei pagini. Mesajul putea fi transmis pe trei linii în modul următor:
II I (numerele paginilor)V II (numerele rândurilor)I IV (numerele cuvintelor)Cifrele romane sunt scrise cu majusculele M, D, C, L, X, V, I, iar valorile corespunzătoare lor sunt în ordine: 1000, 500, 100, 50, 10, 5, 1. Valoarea unui număr scris cu cifre romane se calculează parcurgând de la stânga la dreapta cifrele numărului astfel:
De exemplu pentru numărul MCDXLVI scris cu cifre romane, se obține valoarea 1446 în sistem zecimal, astfel: 1000-100+500-10+50+5+1, iar pentru numărul XXI scris cu cifre romane se obține valoarea 21 în sistemul zecimal astfel: 10+10+1.
Cunoscându-se textul poveștii ales de cei doi și mesajul codificat de ei scrieți un program care rezolvă următoarele două cerințe:
a) Rescrie mesajul codificat folosind scrierea cu cifre din sistemul zecimal.
b) Afișează toate cuvintele mesajului decodificat în ordinea în care acestea apar în poveste.
| Problema | Nod | Operații I/O |
nod.in/nod.out
|
|---|---|---|---|
| Limita timp | 0.5 secunde | Limita memorie |
Total: 2 MB
/
Stivă 2 MB
|
| Id soluție | #63214448 | Utilizator | |
| Fișier | nod.cpp | Dimensiune | 1.63 KB |
| Data încărcării | 21 Februarie 2026, 14:14 | Scor/rezultat | Eroare de compilare |
nod.cpp: In function 'int dec(std::string)': nod.cpp:39:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for (int i=0; i<nr.size()-1; i++) { ^ nod.cpp: In function 'int main()': nod.cpp:70:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for (int i=0; i<cod[0].size(); i++) cuvinte.push_back({cod[0][i], cod[1][i], cod[2][i]}); ^ nod.cpp:74:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (poz >= cuvinte.size()) return 0; ^ In file included from /usr/include/c++/4.8/algorithm:62:0, from nod.cpp:10: /usr/include/c++/4.8/bits/stl_algo.h: In instantiation of '_RandomAccessIterator std::__unguarded_partition(_RandomAccessIterator, _RandomAccessIterator, const _Tp&) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Cuvant*, std::vector<Cuvant> >; _Tp = Cuvant]': /usr/include/c++/4.8/bits/stl_algo.h:2283:70: required from '_RandomAccessIterator std::__unguarded_partition_pivot(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Cuvant*, std::vector<Cuvant> >]' /usr/include/c++/4.8/bits/stl_algo.h:2315:54: required from 'void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Cuvant*, std::vector<Cuvant> >; _Size = int]' /usr/include/c++/4.8/bits/stl_algo.h:5461:36: required from 'void std::sort(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator<Cuvant*, std::vector<Cuvant> >]' nod.cpp:71:38: required from here /usr/include/c++/4.8/bits/stl_algo.h:2245:19: error: passing 'const Cuvant' as 'this' argument of 'bool Cuvant::operator<(Cuvant)' discards qualifiers [-fpermissive] while (__pivot < *__last) ^
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema Nod 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ă.