PROBLEMA 3: Fractali (sau 'Cum a ajuns Cantor la sanatoriu')
DEADLINE: Luni, 15 februarie 1999
TIMP DE IMPLEMENTARE: 75, poate 90 minute
(Obs. Timpii de implementare sunt recomandati
chiar din momentul deschiderii acestui fisier)
PUNCTAJ: 50 dexteri
DOMENIU: Recurenta
Sa consideram patratul de latura 1 cu colturile in (0,0), (1,0), (1,1)
si (0,1). Impartim acest patrat in patru parti egale si numerotam
sferturile in ordinea indicata in figura 1:
(0,1) (1,1)
+-------+-------+
| | |
| 1 | 2 |
| | |
+-------+-------+ Figura 1.jpg (True Color)
| | |
| 3 | 4 |
| | |
+-------+-------+
(0,0) (1,0)
Acest procedeu se reia pentru fiecare din patratele obtinute; rezulta
16 patrate, fiecare avand atasat cate un cod format din doua cifre. De
exemplu, patratul cu codul 24 are colturile in (0.75, 0.5), (1, 0.5),
(1, 0.75) si (0.75, 0.75).
(0,1) (1,1)
+---+---+---+---+
|11 |12 |21 |22 |
+---+---+---+---+
|13 |14 |23 |24 |
+---+---+---+---+ Figura 2.jpg
|31 |32 |41 |42 |
+---+---+---+---+
|33 |34 |43 |44 |
+---+---+---+---+
(0,0) (1,0)
Conform aceluiasi procedeu fiecare patratel se reimparte, obtinand
patratele cu coduri formate din trei cifre s.a.m.d. Problema este ca,
indicandu-se doua patrate P1 si P2 prin codurile lor, sa spuneti daca
patratele sunt:
(a) Identice
(b) P1 inclus in P2, cu care nu are nici un punct de contact
(c) P2 inclus in P1, cu care nu are nici un punct de contact
(d) P1 inclus in P2, cu care are cel putin un punct comun
(e) P2 inclus in P1, cu care are cel putin un punct comun
(f) Exterioare unul altuia, cu cel putin doua puncte comune
(g) Exterioare unul altuia, cu un singur punct comun
(h) Complet disjuncte
OBSERVATIE: Codurile celor doua patrate pot avea lungimi diferite, cel
mult egale cu 10000.
OBSERVATIE LA OBSERVATIE: Un patratel cu lungimea codului de 10000 are
latura de 2^(-10000). Veti avea probleme mari cu underflow-ul pe
orice tip de date real, deci recomandarea este sa nu rezolvati
problema geometric.
EXEMPLE:
Perechi de tipul (a): 31 si 31
Perechi de tipul (b): 141 si 1
Perechi de tipul (c): 2 si 241
Perechi de tipul (d): 124 si 1
Perechi de tipul (e): 4 si 44
Perechi de tipul (f): 1 si 2
Perechi de tipul (g): 1 si 4
Perechi de tipul (h): 11 si 44
INTRAREA se face din fisierul PATRAT.IN, care contine doua linii,
fiecare terminata cu <Enter>. Pe fiecare linie se afla codul unui
patrat, format din cifre intre 1 si 4, NEdespartite prin nimic.
Codurile au intre 1 si 10000 cifre.
IESIREA: Pe ecran se va afisa o litera intre 'a' si 'h',
corespunzatoare situatiei in care se afla cele doua patrate. Comisia
s-a trezit binedispusa astazi si va permite sa afisati o litera mare
sau una mica, la alegere :)
EXEMPLU:
PATRAT.IN Raspuns:
1444444444 F
3222222
TIMP DE RULARE: Ca de obicei, o secunda.
COMPLEXITATE RECOMANDATA: O(L1+L2) unde L1 si L2 sunt lungimile
codurilor.
|
|