Fişierul intrare/ieşire:nod.in, nod.outSursăONI 2014 clasa a 7-a
AutorAutor NecunoscutAdăugată defrancuCristian Francu francu
Timp execuţie pe test0.5 secLimită de memorie2048 kbytes
Scorul tăuN/ADificultatenormalnormalnormalnormalnormal

Vezi solutiile trimise

Nod (clasa a 7-a)

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:

  • cifra curentă se adună la valoarea obţinută până în acel moment, dacă cifra următoare este mai mică sau egală cu ea
  • cifra curentă se scade din valoarea obţinută până în acel moment, dacă cifra următoare este mai mare decât ea
  • ultima cifră se adună întotdeauna la valoarea obţinută până în acel moment

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.

Cerinţă:

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.

Date de intrare

Fişierul de intrare nod.in conţine:

  • pe prima linie numărul 1, dacă se cere rezolvarea doar a cerinţei a) sau numărul 2, dacă se cere rezolvarea cerinţei b)
  • pe următoarele trei linii mesajul codificat după regulile descrise în enunţ
  • dacă primul număr din fişier este 2 atunci a cincea linie conţine trei numere naturale P, R şi C, separate între ele prin câte un spaţiu, cu semnificaţia din enunţ
  • pe următoarele PxR linii este scris textul poveştii, fiecare linie conţinând C cuvinte, separate prin câte un spaţiu.

Date de ieşire

Dacă primul număr din fişierul de intrare este 1 atunci fişierul nod.out va conţine, în aceeaşi ordine, pe trei linii,
numerele din mesajul codificat scrise în sistem zecimal. Numerele vor fi despărţite în cadrul liniilor prin câte un spaţiu.
Dacă primul număr din fişierul de intrare este 2 atunci fişierul nod.out va conţine pe o singură linie cuvintele mesajului
decodificat, în ordinea din poveste. Cuvintele vor fi separate prin câte un spaţiu.

Restricţii

  • 1 ≤ P ≤ 2000; 1 ≤ R ≤ 25; 1 ≤ C ≤ 15
  • 1 ≤ lungimea unui cuvânt din poveste ≤ 12
  • orice număr scris cu cifre romane are cel mult 10 majuscule
  • mesajul decodificat va conţine cel mult 20 de cuvinte

Exemple

nod.innod.outExplicaţii
1
III II I
II V II
VI I IV
3 2 1
2 5 2
6 1 4
Testul de intrare indică rezolvarea primei cerinţe, adică cerinţa a).
Numerele de pe fiecare linie sunt scrise în aceeaşi ordine, în sistemul zecimal.
2
I III II I II
I I II I II
I II II II IV
3 2 4
La Olimpiada problemele pot
avea una sau mai
multe cerinte Pentru unele
probleme comisia poate decide
ca prima cerinta sa
fie evaluata si separat
La Olimpiada comisia decide prima
Testul de intrare indică rezolvarea celei de a doua cerinţe, adică cerinţa b).
Cuvintele identificate în poveste sunt:
La - prin (I,I,I)
prima - prin (III,I,II)
comisia - prin (II,II,II)
Olimpiada - prin (I,I,II)
decide - prin (II,II,IV)
Cuvintele mesajului decodificat, în ordinea din poveste, sunt:
La Olimpiada comisia decide prima
Trebuie sa te autentifici pentru a trimite solutii. Click aici