Värvipalett
문제
Tarkvarafirma Gold \& Silver Soft on arendamas uut graafikaprogrammi. Üks selle mooduleid on värvipaleti haldus. Programmi käivitudes on palett tühi. Edasi võib kasutaja lisada paletti uusi värve või küsida, milline paletis olevatest värvidest on antud värvile sarnaseim.
Värve esitatakse -bitiste arvudena (väärtustega kuni ) ja kahe värvi sarnasuseks loetakse nende esitustes kokkulangevate bittide arvu. Näiteks korral on värvide 00110 ja 10101 sarnasus , sest kokku langevad ainult vasakult teise ja kolmanda biti väärtused.
Kirjutada programmile värvipaleti haldamise moodul, milles on järgmised funktsioonid:
| Funktsioon | Kirjeldus |
|---|---|
void init(int k, int n) |
Paleti initsialiseerimine -bitiste värvide kasutamiseks. Seda funktsiooni kutsutakse välja üks kord programmi töö alguses ja sellele järgnevad kokku add ja find väljakutset. |
void add(int c) |
Värvi lisamine paletti. |
int find(int c) |
Värvile paletist parima vaste leidmine. Funktsioon peab tagastama paletis olevate värvide hulgast värviga maksimaalselt sarnase. Kui maksimaalselt sarnaseid on mitu, tagastada ükskõik milline neist. Seda funktsiooni kutsutakse välja ainult siis, kui paletis on juba vähemalt üks värv. |
void done() |
Töö lõpp. Seda funktsiooni kutsutakse välja üks kord programmi töö lõpus. |
입력
Tekstifaili esimesel real on värvide esitamiseks kasutatavate bittide arv () ja operatsioonide arv (). Järgmisel real on igaühel täisarvud ja (), kus tähendab värvi lisamist paletti ja värvile parima vaste leidmist paletist.
출력
Tekstifaili väljastatakse hindamisprogrammi ja mooduli vahelise suhtluse logi.
예제
예제 1
2 3 1 1 2 0 2 1
init(2, 3) add(1) find(0) = 1 find(1) = 1 done()
예제 2
3 5 1 0 1 7 2 1 1 1 2 1
init(3, 5) add(0) add(7) find(1) = 0 add(1) find(1) = 1 done()