#1205
Nod
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 | #50483728 | Utilizator | |
Fișier | nod.cpp | Dimensiune | 2.86 KB |
Data încărcării | 11 Aprilie 2024, 10:14 | Scor / rezultat | 100 puncte |
nod.cpp: In function 'int transform(std::string)': nod.cpp:7:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(int i=0;i<s.size()-1;i++) { ^ nod.cpp: In function 'int main()': nod.cpp:66:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(int i=0;i<v.size();i++) { ^ nod.cpp:76:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for(int i=0;i<v.size()/3;i++) { ^ nod.cpp:94:33: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if(poz>v.size()/3) { ^
Test | Timp | Mesaj evaluare | Scor posibil | Scor obținut | ||
---|---|---|---|---|---|---|
0 | 0 secunde | OK. | 10 | 10 | ||
1 | 0 secunde | OK. | 10 | 10 | ||
2 | 0 secunde | OK. | 10 | 10 | ||
3 | 0 secunde | OK. | 10 | 10 | ||
4 | 0 secunde | OK. | 10 | 10 | ||
5 | 0.008 secunde | OK. | 10 | 10 | ||
6 | 0.02 secunde | OK. | 10 | 10 | ||
7 | 0.024 secunde | OK. | 10 | 10 | ||
8 | 0.064 secunde | OK. | 10 | 10 | ||
9 | 0.08 secunde | OK. | 10 | 10 | ||
Punctaj total | 100 |
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ă.