Grup2/ server2
...
Asta înseamnă că o grupă poate avea orice nume format din litere și cifre, iar aceasta să aibă în subordine atât mai multe grupe de servere, cât și servere individuale descrise prin IP-ul lor ( eventual descriindu-se și un alias, adică un locțiitor pentru adresa sa ). În final, mai există grupa “all” ce include fiecare altă subgrupa și astfel toate serverele.
În problema de față notațiile vor fi simplificate. Mai precis serverele vor apărea sub forma adresei lor IPv6 ( așa cum vom explica mai jos ), iar grupele vor apărea după următorul format: “group<number>” unde <number> este un alias pentru orice număr natural nenul mai mic decât 1 milion. Mai mult decât atât, orice grupă are cel mult alte 20 de entități în subordine și în total vor fi cel mult 1 milion de entități în subordinea oricărei alte grupe, dar și cel mult 1 milion de servere ( deci 1 milion de IPv6 diferite ).
Asta înseamnă că o grupă poate avea orice nume format din litere și cifre, iar aceasta să aibă în subordine atât mai multe grupe de servere, cât și servere individuale descrise prin IP-ul lor ( eventual descriindu-se și un alias, adică un locțiitor pentru adresa sa ). În final, mai există grupa “all” ce include fiecare altă subgrupa și astfel toate serverele. În problema de față notațiile vor fi simplificate. Mai precis serverele vor apărea sub forma adresei lor IPv6 ( așa cum vom explica mai jos ), iar grupele vor apărea după următorul format: “group<number>” unde <number> este un alias pentru orice număr natural nenul mai mic decât 1 milion. Mai mult decât atât, orice grupă are cel mult alte 20 de entități în subordine și în total vor fi cel mult 1 milion de entități în subordinea oricărei alte grupe, dar și cel mult 1 milion de servere ( deci 1 milion de IPv6 diferite ).
Grupele sunt despărțite între ele prin câte o linie liberă, iar după ultima grupă va exista o linie formată din caractere “#” , cel puțin 3, cel mult 20, ceea ce indică finalul inventarului. Fiecare entiate – fie ea grupă ori server IP, va fi scrisă pe o singură linie, făcându-se astfel distincția între fiecare dintre ele. În final, vor mai fi prezente în fișier un de caractere și un număr. Primul dintre ele reprezintă o grupă, fie ea G. Prima cerință constă în afișarea tuturor serverelor aflate în subordinea acelei grupe, direct sau indirect, în ordine lexicografică. Ultima linie va conține unul din numerele 1 și 2, reprezentând numerele de ordine pentru cele 2 cerințe ale problemei.
Un IPv6 are următoarea structură:
y1 : y2 : y3 : y4 : y5 : y6 : y7 : y8
y[~1~] : y[~2~] : y[~3~] : y[~4~] : y[~5~] : y[~6~] : y[~7~] : y[~8~]
Fiecare element yi ( 0 < i <= 8 ) este format din 4 caractere hexazecimale, fie ele ‘x[~1~]x[~2~]x[~3~]x[~4~]’ , unde xi este orice valoare în mulțimea 0 - 9 și a – f (unde a – f reprezintă primele 6 litere mici din alfabetul latin și reprezintă valorile 10-15 din baza 16 – hexazecimală) . Astfel, șirul y[~1~]:y[~2~]:y[~3~]:y[~4~] reprezintă identificatorul de rețea din care face parte serverul curent, în vreme ce y[~5~]:y[~6~]:y[~7~]:y[~8~] reprezintă numărul de ordine al serverului curent în cadrul rețelei sale. Ordinea lexicografică a două servere este definită în felul următor: Fie două servere ( să le zicem A și B ) având IPv6-urile:
A —> y[~1~] : y[~2~] : y[~3~] : y[~4~] : y[~5~] : y[~6~] : y[~7~] : y[~8~]
B —> z[~1~] : z[~2~] : z[~3~] : z[~4~] : z[~5~] : z[~6~] : z[~7~] : z[~8~]
Fiecare element yi ( 0 < i <= 8 ) este format din 4 caractere hexazecimale, fie ele ‘x1x2x3x4’ , unde xi este orice valoare în mulțimea 0 - 9 și a – f (unde a – f reprezintă primele 6 litere mici din alfabetul latin și reprezintă valorile 10-15 din baza 16 – hexazecimală) . Astfel, șirul y1:y2:y3:y4 reprezintă identificatorul de rețea din care face parte serverul curent, în vreme ce y5:y6:y7:y8 reprezintă numărul de ordine al serverului curent în cadrul rețelei sale. Ordinea lexicografică a două servere este definită în felul următor: Fie două servere ( să le zicem A și B ) având IPv6-urile:
A —> y1 : y2 : y3 : y4 : y5 : y6 : y7 : y8
B —> z1 : z2 : z3 : z4 : z5 : z6 : z7 : z8
A este mai mic decât B dacă există un i ( 0 < i <= 8 ) , astfel încât ( z1 = y1, z2 = y2, ..., z(i-1) = y(i-1) și yi < zi). În acest sens, yi este mai mic decât zi dacă și numai dacă numărul hexazecimal format din caracterele ce îl compun pe yi este mai mic decât numărul hexazecimal format din caracterele ce îl compun pe zi, ceea ce e înseamnă că reprezentarea zecimală în baza 10 a lui yi să fie mai mică decât cea a lui zi.
A este mai mic decât B dacă există un i ( 0 < i <= 8 ) , astfel încât ( z[~1~] = y[~1~], z[~2~] = y[~2~], ..., z[~i-1~] = y[~i-1~] și y[~i~] < z[~i~]). În acest sens, yi este mai mic decât zi dacă și numai dacă numărul hexazecimal format din caracterele ce îl compun pe yi este mai mic decât numărul hexazecimal format din caracterele ce îl compun pe zi, ceea ce e înseamnă că reprezentarea zecimală în baza 10 a lui yi să fie mai mică decât cea a lui zi.
h2. Cerință