Svet je konačno postao jedno mirno mesto, puno sreće i ljubavi. Kako bi uspela da se suprostave kragujevačkom fudbalskom gigantu, dva mala fudbalska kluba Partizan i Crvena zvezda su se ujedinili u jedan i postali Crno Bela Zvezda. Nakon ujedinjenja, Crno Bela Zvezda je dobila novi grb. Grb je u obliku crno belog zvezda grafa sa čvora. Crno beli zvezda graf sa čvora predstalja stablo čiji su svi čvorovi obojeni crnom ili belom bojom i čiji je koren obojen suprotnom bojom od listova (ako je koren obojen crnom bojom onda su listovi obojeni belom, dok ako je koren obojen belom bojom listovi su obojeni crnom).
Mladi Ćimi, vođa navijača Crno Bele Zvezde, dobio je crveni papir na kome su nacrtane crne i bele tačke. Nacrtano je tačno tačaka numerisanih brojevima od do . Boje tačaka su određene nizom , ako je -ta tačka bela onda je , u suportnom . Kada bi se tačke spojile redom , gradile bi pravilan -tougao. Ćimi je prosto opsednut grbom novog kluba i želi da ga nacrta tačno puta na tom crvenom papiru. On želi da svaka tačka pripada tačno jednom grbu i da se grbovi međusobno ne presecaju, jer misli da bi tako urušio lepotu grbova.
Ćimi vas je zamolio da mu pomognete da izračuna broj načina da nacrta tačno grbova. Dva načina se razlikuju ako postoji bar jedan grb koji je nacrtan na jednom crtežu i nije nacrtan na drugom. Kako broj načina može biti veliki, ispisati taj broj po modulu .
Opisi funkcija
Potrebno je da implementirate funkciju:
- N
je broj tačaka na papiru. je niz dužine koji predstavlja boje tačaka, -ta tačka je bela ako važi , inače je tačka crna i . Niz je indeksiran od .
Funkcija treba da vrati ceo broj -- broj načina da Ćimi nacrta grbove po modulu .
Primer
Neka je , .
Postoji načina da se nacrtaju zvezde:
- prva zvezda : , druga zvezda
- prva zvezda : , druga zvezda
Ograničenja
- , je deljivo sa
Podzadaci
Postoji ukupno podzadataka, koji zadovoljavaju ograničenja napisana u tabeli:
Redni broj podzadatka | Ograničenje za N | Broj poena |
---|---|---|
1 | 12 | 4 |
2 | 24 | 4 |
3 | 52 | 4 |
4 | 76 | 4 |
5 | 100 | 4 |
6 | 128 | 5 |
7 | 152 | 5 |
8 | 200 | 5 |
9 | 252 | 5 |
10 | 300 | 12 |
11 | 352 | 12 |
12 | 400 | 12 |
13 | 452 | 12 |
14 | 500 | 12 |
Detalji implementacije
Potrebno je da pošaljete tačno jedan fajl zvezda.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 Zvezda(int N, int *A);
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 broj ,
- U narednom redu celih brojeva - .
Zatim ovaj program zove vašu funkciju i štampa vrednost koju je funkcija vratila. Kodove ovih programa možete menjati po potrebi.
Comments