Bio jednom jedan film. Vi stojite ispred bioskopa i pitali ste ljudi da vam ispričaju jednu scenu iz filma. Kako su pukom koincidencijom svi ti ljudi takođe odlični programeri kao i vi, svako od njih vam je ispričao jednu scenu, predstavljenu kao string malih slova engleske abecede, uz napomenu da se ta scena javlja u filmu tačno jednom. Vaš zadatak je da rekonstruišete film, tačnije, da pronađete string najkraće moguće dužine koji će svaku scenu sadržati tačno jednom, takav da se taj string sastoji samo od prvih malih slova engleske abecede.
Opisi funkcija
Potrebno je da implementirate funkciju
koja treba da nađe string opisan u tekstu zadatka. označava broj ljudi koji su vam rekli jednu scenu iz filma. je broj koji označava koliko prvih malih slova engleske abecede možete koristiti za konstruisanje filma. je niz dužine koji sadrži dužine datih scena. je niz nizova, gde elementi čine -tu scenu. Svi ovi elementi su mala slova engleske abecede. Ukoliko takav string postoji, pronađeni string minimalne dužine smestite u niz počev od pozicije , a njegovu dužinu vratite kao rezultat funkcije. Ukoliko takav string ne postoji, dovoljno je da iz funkcije vratite broj . Garantuje se da će za string biti rezervisano dovoljno memorije da ceo rezultujući string može da stane. Svi nizovi su indeksirani od 1.
Primeri
Primer 1
Neka je , a stringovi su ave
, venge
, ger
, rs
, r
, av
. Rešenje je string avengers
. Vaša funkcija treba da upiše ovaj string na pozicije i da vrati broj .
Primer 2
Neka je , a stringovi su ababa
, aba
. Rešenje ne postoji. U ovom slučaju dovoljno je da vaša funkcija vrati broj .
Ograničenja
Podzadaci
- Podzadatak 1 [14 poena]: , ukoliko rešenje postoji, tada je ono ne duže od .
- Podzadatak 2 [12 poena]:
- Podzadatak 3 [23 poena]:
- Podzadatak 4 [51 poen]: Bez dodatnih ograničenja.
Detalji implementacije
Potrebno je da pošaljete tačno jedan fajl film.cpp
, koji implementira pomenutu funkciju. Osim tražene funkcije, vaš fajl može sadržati i dodatne globalne promenljive, pomoćne funkcije i dodatne biblioteke.
Vaša funkcija mora biti sledećeg oblika:
int Resi(int N, int K, int* L, char** A, char* S);
Vašim programima je dozvoljeno da menjaju sadržaj nizova/matrica, ali ne smeju da pristupaju van granica datih nizova.
Testiranje i eksperimentisanje
Uz zadatak, obezbeđen vam je "template" fajl code.cpp
koji možete koristiti i menjati po potrebi. Takođe vam je obezbeđen program grader.cpp
koji služi da lakše testirate kodove. Ovaj program učitava sa standardnog ulaza sledeće podatke:
- U prvom redu brojeve ,
- U narednih redova po jedan string - .
Zatim ovaj program zove vašu funkciju. Neka je vaša funkcija vratila broj . Ukoliko je , štampa se samo . U suprotnom, štampa se i prvih karaktera niza . Kodove ovih programa možete menjati po potrebi.
Comments