Sunteți pe pagina 1din 20

Algoritmi geometrici

Prof. Doru Popescu Anastasiu, C.N.Radu Greceanu, Slatina, Jud. Olt


1. Noiuni generale
1.1 Drepte Ecuaia unei drepte n plan Forma general a ecuaiei unei drepte d n sistemul de coordonate xOy este urmtoarea: d: a x + b y + c = 0 (1). Orice punct M(x,y) de pe dreapta d verific ecuaia (1). Ecuaia unei drepte care trece prin dou puncte date A(xA,yA) i B(xB,yB) este urmtoarea:
x xA xB xA = (2), sau echivalent cu aceasta: ( x xA)( yB yA) = ( xB xA)( y yA) , pentru a y yA yB yA

evita situaiile cnd numitorul se anuleaz. O alt form a acestei ecuaii este
x xA xB y 1 yA 1 = 0 (3). yB 1

Dup efectuarea calculelor n (2) sau (3) se obine ecuaia (1), n care
a = yA yB

b = xB xA

(4)

c = xB yA + yB xA
Ecuaiile parametrice ale unei drepte Considerm dou puncte distincte M1(x1,y1) i M2(x2,y2). Un punct M(x,y) se gsete pe dreapta M1M2, dac
x = x1 + ( x 2 x1)t y = y1 + ( y 2 y1)t , t numr real.

(5)

Ecuaiile (5) se numesc ecuaiile parametrice ale dreptei M1M2.

1
www.ls-infomat.ro | www.manuale-de-informatica.ro

Dac n (5) lum t numr real din intervalul [0,1], atunci obinem ecuaiile parametrice ale segmentului [M1M2]. Panta unei drepte Panta unei drepte reprezint tangenta unghiului fcut de dreapt cu axa Ox. Panta unei drepte d dat prin ecuaia (1) este m = , iar pentru dreapta dat de ecuaia (2) sau (3) este m =
xB xA . yB yA a b

Proprieti 1) Dou drepte sunt paralele dac i numai dac pantele lor sunt egale. 2) Dou drepte sunt perpendiculare dac i numai dac produsul pantelor este -1. Ecuaia unei drepte care trece printr-un punct i are o pant dat Fie M1(x1,y1) i un numr real m. Ecuaia dreptei care trece prin punctul M1 i are panta m este
y y1 = m ( x x1)

Poziia unui punct fa de o dreapt Considerm o dreapt d dat prin ecuaia a x + b y + c = 0 i un punct M(xM,yM). Atam dreptei d funcia f : R R R, f ( x, y ) = a x + b y + c . Dreapta d mparte planul n dou semiplane, S+ i S- definite astfel: S+ este mulimea punctelor M(xM,yM) care ndeplinesc condiia f ( xM , yM ) > 0 . S- este mulimea punctelor M(xM,yM) care ndeplinesc condiia f ( xM , yM ) < 0 . Punctele M(xM,yM) de pe dreapta d ndeplinesc condiia f ( xM , yM ) = 0 . Intersecia a dou drepte Dou drepte d1 i d2, de ecuaii d1: a1 x + b1 y + c1 = 0 d2: a 2 x + b2 y + c 2 = 0 Gsirea punctului de intersecie a dreptelor d1 i d2 presupune rezolvarea sistemului:
a1 x + b1 y + c1 = 0 a 2 x + b 2 y + c 2 = 0

Acest sistem are soluie unic, dac pantele celor dou drepte sunt diferite, adic dac a1 b2 a 2 b1 . Dac aceast condiie este ndeplinit atunci punctul de intersectie al dreptelor d1 i d2 are coordonatele:
x= b1 c 2 b2 c1 a1 b2 a 2 b1 c1 a 2 c 2 a1 . y= a1 b2 a 2 b1

2
www.ls-infomat.ro | www.manuale-de-informatica.ro

Intersecia a dou segmente Considerm segmentele [M1M2], [M3M4], date prin coordonatele capatelor. M1(x1,y1), M2(x2,y2), M(x3,y3), M4(x4,y4).
y M1 M4

M3 O

M2

Pentru ca cele dou segmente s se intersecteze trebuie ca: M1 i M2 s se gseasc n semiplane (nchise) diferite delimitate de dreapta M3M4 M3 i M4 s se gseasc n semiplane (nchise) diferite delimitate de dreapta M1M3

Dac ecuaia dreptei M1M2 este a1 x + b1 y + c1 = 0 , iar cea a dreptei M3M4 este a 2 x + b2 y + c 2 = 0 , atunci cele dou condiii anterioare sunt echivalente cu (a 2 x1 + b2 y1 + c 2) (a 2 x 2 + b 2 y 2 + c 2) <= 0 i
(a1 x3 + b1 y3 + c1) (a1 x 4 + b1 y 4 + c1) <= 0

1.2 Puncte. Distane Distana dintre dou puncte Considerm dou puncte M1(x1,y1), M2(x2,y2). Distana dintre M1 i M2 este dat de relaia
M 1M 2 = ( x1 x 2) 2 + ( y1 y 2) 2

Puncte interior unui segment Un punct M(x,y) este interior unui segment [M1M2], M1(x1,y1), M2(x2,y2) dac M1M2=M1M+MM2, adic dac
( x1 x 2) 2 + ( y1 y 2) 2 = ( x1 x) 2 + ( y1 y ) 2 + ( x x 2) 2 + ( y y 2) 2

Distana de la un punct la o dreapt Pentru o dreapt d: a x + b y + c = 0 i un punct M0(x0,y0), distana de la M la d este egal cu
dist ( M 0, d ) = | a x0 + b y 0 + c | a2 + b2

3
www.ls-infomat.ro | www.manuale-de-informatica.ro

Distana de la un punct la un segment Considerm un segment [M1M2], cu M1(x1,y1), M2(x2,y2) i un punct M(x,y). Prin distana de la M la segmentul [M1M2] nelegem lungimea celui mai scurt segment cu un capt n M i cellalt pe [M1M2].

dist(M, M1M2), daca proiectia lui M pe M1M2 apartine lui[M1M2] dist(M, [M1M2]) = min{MM 1, MM 2}, altfel
Centrul de greutate Centrul de greutate al unui sistem omogen de n puncte: M1(x1,y1), M2(x2,y2), , Mn(xn,yn) este un punct G(xG,yG), cu
xG = x1 + x 2 + ... + xn n y1 + y 2 + ... + yn yG = n

Aria unui triunghi 1. Dac triunghiul este dat prin lungimile laturilor: a, b, c, atunci pentru calculul ariei se foloseste formula lui Heron:
S= p( p a)( p b)( p c) , unde p = a+b+c 2

2. Dac triunghiul este dat prin coordonatele vrfurilor sale A(xA,yA), B(xB,yB), C(xC,yC), atunci
S= xA 1 abs ( xB 2 xC yA 1 yB 1 ) , adic S = yC 1 1 abs( xA yB + xB yC + yA xC xC yB xA yC xB yA) 2

Aria unui poligon convex Pentru calculul ariei unui poligon convex A1A2An, Ai(xi,yi), i {1,2,..., n} , se realizeaz o partiie a suprafeei poligonale n triunghiuri, de exemplu:
aria ( A1A2... An) = aria ( A1A2 A3) + aria ( A1A3 A4) + ... + aria ( A1An 1An)

O modalitate de calcul a ariei unui poligon (convex sau nu) este data de formula:

aria ( A1A2... An) =

x (y
i i =1

i +1

y i 1 ) / 2 (vezi [5])

4
www.ls-infomat.ro | www.manuale-de-informatica.ro

Punct interior unui poligon convex Un punct M(x,y) se gsete n interiorul sau pe frontiera unui poligon convex dac
aria ( A1A2... An) = aria ( MA1A2) + aria ( MA2 A3) + ... + aria ( MAnA1)

Rapoarte Fie M1(x1,y1) i M(x2,y2) distincte. M(x,y) un punct pe dreapta M1M2, diferit de M2. Numrul k definit astfel
MM 1 , dac M [ M 1M 2] k = MM 2 MM , dac M [ M 1M 2] MM 2

se numete raportul n care M mparte segmentul [M1M2]. Fiind cunoscut numrul real k 1 , coordonatele lui M, care mparte segmentul [M1M2] n raportul k sunt
x= x1 kx 2 1 k y1 ky 2 . y= 1 k

Caz particular M este mijlocul segmentului [M1M2], k = 1 . n acest caz coordonatele lui M sunt
x= x1 + x 2 2 y1 + y 2 y= 2

Probleme propuse 1. Se dau dou segmente prin coordonatele capetelor lor. Se cere s se verifice dac segmentele se intersecteaz i n caz afirmativ s se determine coordonatele punctului de intersecie. 2. Se d un poligon prin coordonatele vrfurilor sale i se cere s se verifice dac este convex. 3. Se d un punct M i un poligon convex P prin coordonatele vrfurilor. Se cere s se determine distana de la punctul M la poligonul P (lungimea celui mai mic segment de la punctul M la un punct de pe poligonul P). 4. Se d un poligon convex P prin coordonatele vrfurilor sale i un punct M dat prin coordonate. Se cere s se determine poziia punctului M fa de poligonul P (interior, exterior sau pe poligon).

2. nfurtoarea convex
Se consider n puncte n plan A1, A2, , An, date prin coordonate: (x1,y1), (x2,y2), , (xn,yn). Vrem s determinm un poligon convex care aib vrfurile printre punctele date i s conin pe laturi sau n interior celelalte puncte. Acest poligon se numete nfurtoarea convex asociat punctelor A1, A2, , An. Un algorim cu complexitate O(nlogn) care poate fi implementat uor este scanarea Graham.
5
www.ls-infomat.ro | www.manuale-de-informatica.ro

nainte de a descrie acest agoritm vom introduce dou noiuni utile: unghi polar i unghi care realizaz o ntoarcere. 1. Unghi polar Fie M1 i M2 dou puncte distincte. Pentru punctul M1, unghiul polar asociat lui M2 este unghiul format de dreapta orizontal care trece prin M1 i dreapta M1M2.
y M2

M1

M3 x

Dac se cunosc coordonatele punctelor M1 i M2 se poate determina uor distana de la M1 la M2 i distana de la M2 la orizontala care trece prin M1. Folosind acest dou distane (M1M2 i M1M3) se poate calcula cosinusul unghiului fcut de M1M2 cu axa Ox i implicit unghiul fcut de M1M2 cu Ox (folosind funcia arccos). 2. Unghi care realizaz o ntoarcere Considerm trei puncte M1(x1,y1), M2(x2,y2), M3(x3,y3). Spunem c unghiul M2M1M3 realizeaz o ntoarcere spre stnga (a lui M3) fa de M2M1, dac ne aflm n situaia
y M3

M1

M2 x

Aceast situaie este caracterizat de inegalitatea


x1 x2 x3 y1 1 y 2 1 > 0 x1 y 2 + x 2 y3 + x3 y1 x1 y3 x 2 y1 x3 y 2 > 0 y3 1

Spunem c unghiul M2M1M3 realizeaz o ntoarcere spre dreapta (a lui M3), fa de M2M1, dac ne aflm n situaia

6
www.ls-infomat.ro | www.manuale-de-informatica.ro

M1

M2 x M3

Aceast situaie este caracterizat de inegalitatea


x1 x2 x3 y1 1 y 2 1 < 0 x1 y 2 + x 2 y3 + x3 y1 x1 y3 x 2 y1 x3 y 2 < 0 y3 1

Scanarea Graham rezolv problema nfurtorii convexe prin pstrarea unei stive care conine puncte. Fiecare vrf dat este inserat n stiv o singur dat, iar punctele care nu fac parte din nfurtoare sunt eliminate pe parcurs. Astfel n final stiva va conine vrfurile nfurtorii convexe n ordine trigonometric. Descriere algoritm Pas 1. Se determin vrful A0 care are ordonata cea mai mic i n cazul n care exist mai multe astfel de puncte se alege cel care are abscisa cea mai mic. Pas 2. Se sorteaz punctele mulimii {A1, A2, , An}\{A0} cresctor dup unghiurile polare n jurul vrfului A0. Dac exist mai multe vrfuri cu acelai unghi polar, atunci se pstreaz doar cel care afl la distana maxim de A0. Dup aceast operaie se obin punctele A1, A2, , Am. Pas 3. Inserm ntr-o stiv (iniial vid) punctele A0, A1, A2. Pas 4.Vom considera pe rnd nodurile Ai, i {3,4,..., m} . Vom nota cu Ai, nodul curent, cu Ai1 nodul care face parte din vrful stivei i cu Ai-2 nodul urmtor din stiv. Pentru fiecare nod Ai vom verifica dac unghiul format de punctele Ai-2,Ai-1,Ai nu formaeaz un unghi care s anuleze convexitatea poligonului. Practic acest unghi trebuie s realizeze o ntoarcere spre stnga. n cazul n care nu se pstreaz convexitatea, vrful Ai-1 se elimin din stiv. Verificarea continu (cu eliminri succesive dac este cazul) pn n momentul n care unghiul format nu indic pierderea convexitii. n final stiva va conine doar vrfurile nfurtorii convexe, n ordine trigonometric.

3. Centrul de simetrie al unei mulimi de puncte


Fie A = { A1, A2,..., An} o mulime de n puncte n plan. Un punct S din plan se numete centru de simetrie dac pentru orice punct Ai din mulimea A, simetricul su fa de S este tot un punct din mulimea A.

7
www.ls-infomat.ro | www.manuale-de-informatica.ro

Exemplu. Pentru punctele din figur, S(0,10) este centru de simetrie.


A4 y 20

A5

A2

S 10

A3

A1

A6 -20 -10 O 10 20

n continuare vom rearanja punctele din A astfel nct s fie ordonate cresctor dup abscis i la abscis egal ordonate cresctor dup ordonat. Proprietate Mulimea A are centru de simetrie dac i numai dac: n este par Segmentele [A1An], [A2An-1], [A3An-2], au acela mijloc. Acest punct este centrul de simetrie.

4. Poziia unui punct fa de un poligon


Prin poligon nelegem o linie frnt care nu se autointersecteaz. Considerm n continuare un poligon P=A1A2An i un punct M. A1(x1,y1), , An(xn,yn) i M(x0,y0). Dorim s determinm poziia lui M fa de poligonul P. Adic s verificm dac M este interior lui P, exterior lui P sau pe poligonul P. Pentru a verifica dac M este interior lui P, folosim o observaie imediat, i anume faptul c, dac intersecia unui segment cu un capt n M i un capt ntr-un punct N exterior lui P, cu laturile poligonului este format dintr-un numr impar de puncte, atunci M este interior lui P.

Exist ns cteva situaii cnd punctele de intersecie dintre segmentul (MN) i laturile lui P nu se numr. Aceste situaii le prezentm n continuare.

8
www.ls-infomat.ro | www.manuale-de-informatica.ro

- Dac dreapta MN coincide cu dreapta suport a unei laturi din P, atunci intersecia dintre (MN) cu latura respectiv conine o infinitate de puncte, care evident nu se numr. - Dac segmentul (MN) intersecteaz o latur ca n cazul urmtor
Ai-1 Ai+1

M Ai

aceasta nu se numr. ns intersecia din cazul urmtor se numr


Ai-1

M Ai

Ai+1

Un algoritm care determin poziia unui punct fa de un poligon poate fi urmtorul: Pas 1. Determinm un punct exterior lui P astfel: Dintre vrfurile poligonului P determinm unul Ai, cu proprietatea c are abscisa minim i n cazul n care exist mai multe astfel de puncte se ia cel cu ordonata minim. Considerm punctul exterior N(xi-1,yi). Pas 2. Pentru orice segment (AiAi+1), dac (AiAi+1) intersectat cu (MN) ne d un punct, atunci mrim numrul de puncte de intersecie cu 1. Pas 3. Pentru orice vrf Ai, al poligonului, dac Ai-1 i Ai+1 sunt de o parte i de alta a dreptei MN, atunci numrul de puncte de intersecie se mrete cu 1. Pas 4. Dac numrul de puncte de intersecie calculat la paii anteriori este impar, atunci M este interior lui P. Altfel, verificm dac M se gsete pe poligon (verificnd dac M se gsete pe fiecare latur a lui P). Dac nu se gsete pe poligonul P, atunci M este exterior lui P.

9
www.ls-infomat.ro | www.manuale-de-informatica.ro

5. Determinarea unui poligon care trece printr-o mulime de puncte


Considerm n continuare o mulime de puncte n plan A={A1,A2, , An}. Vrem s renumerotm punctele din mulime astfel nct A1A2An s fie poligon. Exemplu
A1 A3 A5 A6

A2 A7

A4

Dac considerm punctele n ordinea de mai sus, A1A2A7 nu este poligon, ns dup renumerotarea de mai jos, A1A2A7 este poligon.
A7 A1 A6 A5

A2 A4

A3

O modalitate de permutare a punctelor mulimii A, pentru a obine un poligon este inspirat de scanarea Graham. Mai precis: Pas 1. Se determin vrful Ai care are ordonata cea mai mic i n cazul n care exist mai multe astfel de puncte se alege cel care are abscisa cea mai mic. Interschimbm Ai cu A1. Pas 2. Se sorteaz punctele mulimii {A2, , An} cresctor dup unghiurile polare n jurul vrfului A1. Dac exist mai multe vrfuri cu acelai unghi polar, atunci acestea se ordoneaz descresctor dup distana de la A1. Dup aceast operaie se obin vrfurile poligonului dorit, n ordinea A1, A2, , An. Pentru exemplul anterior se obine ordinea:

10
www.ls-infomat.ro | www.manuale-de-informatica.ro

A5 A6 A4 A3

A7 A2

A1

6. Poziionarea unui cerc ntr-o mulime de puncte


Considerm n puncte n plan astfel nct oricare trei s fie necoliniare, date prin coordonatele lor carteziene P1(x1,y1); P2(x2,y2); ...; Pn(xn,yn), numere ntregi. Vrem s determinm un cerc (centrul i raza sa) care s treac prin cel puin trei din cele n puncte i s nu conin nici un punct n interior. Putem gsi acest cerc astfel: 1. Determinm dou puncte A i B printre cele n puncte date cu proprietatea c toate celelalte n-2 puncte se afl ntr-un semiplan delimitat de dreapta AB. 2. Se determin punctul C printre punctele diferite de A si B astfel nct unghiul ACB s fie maxim. 3. A,B,C sunt punctele cutate, pentru care se determin cercul circumscris cu centrul n punctul de coordonate (a,b) i raz r.
C Pi Pk Ph

Pe aceeai idee putem rezolva problema gsirii unui cerc care s treac prin trei puncte i care s le conin pe toate celelalte n interior. Mai precis n algoritmul anterior se consider la pasul 2 n loc de unchiul cel mai mare, unghiul cel mai mic.

11
www.ls-infomat.ro | www.manuale-de-informatica.ro

O alt problem legat de gsirea unui cerc cu o anumit proprietate relativ la o mulime de puncte este urmtoarea: Se dau 2n+3 puncte n plan astfel nct oricare trei s fie necoliniare i oricare 4 puncte nu se afl pe acelai cerc, date prin coordonatele lor carteziene P1(x1,y1); P2(x2,y2); ...; Pn(xn,yn), numere ntregi. Se cere s se determine un cerc (centrul i raza sa) care s treac prin trei din cele 2n+3 puncte, s conin n interior n puncte, iar n exterior n puncte. Ideea de rezolvare a acestei probleme este dat de urmtorii pai: 1. Printre cele 2n+3 puncte se caut dou puncte B i C cu proprietatea c toate celelalte puncte (notate cu A1, A2, , A2n+1) sunt n acelai semiplan. 2. Ordonm punctele A1, A2, , A2n+1 astfel nct m(BA1C)< m(BA2C)<< m(BA2n+1C). 3. Cercul care trece prin punctele An+1, B, C va lsa punctele A1, , An n afar i pe An+2, , A2n+1 n interiorul su. 4. Pentru cercul de la pasul anterior se determin coordonatele centrului i raza sa.

Probleme propuse n concursuri


1. Agentul 007 are de distrus o tabr de teroriti. Tabra de teroriti este format din mai multe obiective (depozite de muniie, pavilioane pentru teroriti, etc.), considerate punctiforme n plan. Agentul 007 primete de la serviciul de informaii o hart cu n obiective din tabra teroritilor, date prin coordonatele carteziene. Pe lng hart, agentul 007 mai primete i o arm special (construit pentru aceast misiune). Arma primit are dou evi i permite tragerea simultan pe aceeai direcie (rectilinie), dar n sens invers a dou rachete cu aceeai vitez. Dup ce se trage cu arma, odat cu atingerea unei inte explodeaz i cealalt rachet (chiar dac aceasta din urma nu i-a atins inta). Cerin Agentul 007 vrea s distrug tabra ct mai repede i cu ct mai puine rachete, pentru acest lucru el studiaz posibilitatea s se aeze ntr-un punct din tabr (diferit de obiective) care s permit trageri eficace, adic la fiecare tragere s distrug cte dou obiective simultan. Determinai dac este posibil s se gseasc un astfel de punct. Date de intrare n fiierul a007.in pe prima linie se afl numrul de teste k, dup care urmeaz date pentru fiecare test. Pentru fiecare test pe o linie se afl n, iar pe urmtoarele n linii sunt coordonatele obiectivelor din tabra teroritilor (separate printr-un spaiu n ordinea abscis ordonat). Date de ieire n fiierul a007.out se vor scrie k linii, pe fiecare linie se va scrie 1, dac exist soluie i 0 dac nu exist soluie. n cazul n care exist soluie se va scrie n continuare pe aceeai linie separate, printr-un spaiu coordonatele punctului cerut (numere reale trunchiate la 4 zecimale, n ordinea abscis ordonat). Restricii 0 n 10000 1 k 3 coordonatele punctelor sunt ntregi din intervalul [-10000, 10000] Observaie Un obiectiv este distrus dac racheta explodeaz exact n punctul corespunztor lui.

12
www.ls-infomat.ro | www.manuale-de-informatica.ro

Exemplu
a007.in 2 4 10 0 10 10 0 10 0 0 6 0 0 10 0 2 10 12 0 5 0 7 0 a007.out 1 5.0000 5.0000 0

(ONI, 2004)
2.

n regatul XLand oraele erau nconjurate de ziduri n form de poligoane convexe. mpratul a dispus construirea unui drum de legtur direct ntre capital i un alt ora dat. Fiecare extremitate a drumului poate fi orice punct situat pe zidul oraului, respectiv capitalei. Lungimea drumului este distana dintre extremitile sale.
Cerin

Determinai cel mai scurt drum dintre capital i oraul dat.


Date de intrare Fiier de intrare: DRUM.IN Linia 1: K1 numr natural nenul, reprezentnd numrul de coluri ale zidurilor capitalei; Linia 2: x1 y1 x2 y2 ... xK1 yK1 K1 perechi de numere ntregi, separate prin cte un spaiu, reprezentnd coordonatele vrfurilor zidurilor capitalei; Linia 3: K2 numr natural nenul, reprezentnd numrul de coluri ale zidurilor oraului dat; Linia 4: x1 y1 x2 y2 ... xK2 yK2 K2 perechi de numere ntregi, separate prin cte un spaiu, reprezentnd coordonatele vrfurilor zidurilor acestui ora. Date de ieire Fiier de ieire: DRUM.OUT Linia 1: x1 y1 x2 y2 patru numere reale trunchiate la 4 zecimale, separate prin cte un spaiu, reprezentnd extremitile drumului de legtur respectiv. Restricii 2 K1,K2 20 Coordonatele vrfurilor zidurilor ce nconjoar oraul, respectiv capitala sunt numere ntregi aparinnd intervalului [-100,100] i sunt date fie n ordinea deplasrii acelor de ceasornic, fie n sens invers deplasrii acelor de ceasornic. Capitala i oraul nu au nici un punct comun (nu au puncte interioare comune i nu au puncte comune pe zidurile lor). Exemplu DRUM.IN DRUM.OUT 4 5.0000 3.5000 8.0000 3.5000 3 4 3 2 5 2 5 4 4 8 3 8 6 11 6 11 3 Timp maxim de executare/test: 1 secund (ONI, 2001, Bacu)

13
www.ls-infomat.ro | www.manuale-de-informatica.ro

3. ntr-o zon agricol care conine mai multe proprieti (de form poligonal convexe sau concave) s-a desfurat un concurs de parautism. La acest concurs au participat N parautiti codificai prin 1, 2, , N. Concursul este ctigat de acei parautiti care aterizeaz pe una dintre proprietile cu aria cea mai mare. Cerin Scriei un program care determin parautitii care ctig concursul. Date de intrare Fiierul de intrare concurs.in conine: concurs.in N a1 b1 a2 b2 ... aN bN m c1 x11 y11 x12 y12 x1c1 y1c1 c2 x21 y21 x22 y22 x2c1 y2c1

Semnificaie N numrul de parautiti ai bi - abscisa i ordonata punctului n care aterizeaz parautistul i m numrul de proprieti ci reprezint numrul de coluri ale proprietii i, iar xij yij reprezint abscisa, respectiv ordonata unui col al proprietii i. Colurile unei proprieti sunt date ntr-o ordine astfel nct s se poat parcurge continuu frontiera ei.

cm xm1 ym1 xm2 ym2 xmc1 ymc1

Date de ieire Fiierul de ieire concurs.out conine pe prima linie codurile asociate parautitilor care au ctigat concursul n ordine cresctoare (separate prin cte un spaiu). Dac nu exist ctigtori se va scrie cifra 0. Restricii N numr natural, 1N50; 0 ai,bi 100, numere reale cu maxim 4 cifre zecimale; m numr natural, 1m20; ci numere naturale, 1ci20; xij, yij sunt numere naturale 100 Observaii - Frontiera unei proprieti nu face parte din proprietate; - Proprietile sunt disjuncte (nu exist dou proprieti cu suprafee de teren comune). - Dou numere reale x i y le considerm egale dac |x-y|<10-4. Exemplu concurs.in concurs.out 4 1 4 3 5 10 4 7 1 3.002 6 2 4 9 3 11 3 11 5 9 5 5 5 3 4 5 5 7 3 7 2 5 Timp maxim de execuie: 8 secunde/test (Baraj, Bucuresti, 2002) 4. Se da un poligon convex cu n vrfuri (50n4) prin coordonatele vrfurilor (numere ntregi din intervalul [-2000, 2000]) date n sensul acelor de ceasornic. a) Sa se verifice daca poligonul are centru de simetrie. b) Sa se mparta poligonul (daca are centru de simetrie) n paralelograme.

14
www.ls-infomat.ro | www.manuale-de-informatica.ro

Datele de intrare se citesc din fi[ierul text POLIGON.IN cu structura: n x1 y1 x2 y2 xn yn Datele de iesire se vor introduce n fi[ierul text POLIGON.OUT cu structura: mesaj px11 py11 px21 py21 px31 py31 px41 py41 px12 py12 px22 py22 px32 py32 px42 py42 px1k py1k px2k py2k px3k py3k px4k py4k unde mesaj poate fi DA sau NU, n functie de existenta sau nu a centrului de simetrie. Daca mesajul este NU, fisierul va contine doar prima linie, altfel va mai contine coordonatele vrfurilor (n sensul acelor de ceasornic) paralelogramelor, pe cte un rnd fiecare. Exemple: Pentru fisierul POLIGON.IN cu continutul: 8 20 30 30 30 40 20 40 10 30 0 20 0 10 10 10 20 Fisierul de iesire POLIGON.OUT poate contine spre exemplu solutia: DA 20 0 10 10 20 10 30 0 10 10 10 20 20 20 20 10 10 20 20 30 30 30 20 20 20 10 20 20 30 10 30 0 20 20 30 30 40 20 30 10 40 20 40 10 30 0 30 10 Pentru fisierul POLIGON.IN cu continutul: 4 10 20 40 30 40 10 20 10 Fisierul de iesire POLIGON.OUT va contine: NU Observatie: Sirul de paralelograme folosit la mpartirea poligonului nu va contine paralelograme n configuratia din figura alaturata, pentru ca paralelogramele ABED si BCFE pot fi nlocuite cu ACFD.

(ONI, 2000)

15
www.ls-infomat.ro | www.manuale-de-informatica.ro

5. Generalul Donald are pe cmpul de lupt n soldai. Pentru a ti exact unde sunt dispui soldaii a primit de la un colonel o hart pe care este precizat poziia lor. Pentru a obine informaii noi din tabra inamicului a trimis o grup de cercetare n teren. Dup cteva ore aceast grup se ntoarce cu o informaie preioas, inamicul are o arm care poate distruge pe o direcie dreapt orice obstacol de pe hart. Avnd aceast informaie generalul Donald studiaz harta i observ c are cam muli soldai dispui pe aceeai linie dreapt. Cerin Se cere s se determine numrul maxim de soldai care se gsesc poziionai pe o aceeai linie dreapt. Date de intrare Fiierul de intrare sol.in conine pe prima linie numrul n, iar pe urmtoarele n linii coordonatele carteziene ale fiecrui soldat pe hart. O astfel de linie are formatul: abscis ordonat (separate ntre ele printr-un singur spaiu). Date de ieire Fiierul de ieire sol.out se va conine numrul maxim de soldai care se gsesc poziionai pe o aceeai linie dreapt. Restricii 1 n 300 Toate coordonatele poziiilor soldailor sunt numere ntregi din intervalul [-1000,1000]. Nu exist doi soldaii aflai n aceeai poziie. Exemplu sol.in sol.out 5 3 5 5 10 2 18 5 5 2 10 5 Timp maxim de execuie: 0.1 secunde/test

Explicaie Exist trei soldai care se gsesc poziionai pe o linie dreapt.

(.campion, 2005-2006)
6. O companie fomat din n soldai (codificai prin numerele 1, 2, , n) are ca misiune s pzeasc un obiectiv militar de maxim importan. Soldaii au fiecare la dispoziie un anumit numr de cartue pe care le poate folosi pentru aprarea obiectivului. Fiecare soldat i, i{1, 2, , n} se aeaz ntr-un anumit loc caracterizat prin coordonate (abscis i ordonat) i i sap un adpost pentru a putea rezista inamicului. Nu se pot aeza doi soldai pe acelai loc. Comandantul stabilete zonele de aprare contrice. O zon de aprare este delimitat de acei soldai care sunt n via i care dac sunt unii prin tranee (segmente de dreapt) formeaz un poligon convex ce conine n interiorul su toi ceilali soldai aflai n via. O zon de aprare conine cel puin trei soldai i se formez imediat dup ce zona anterioar a cedat. O zon de aprare cedeaz cnd cel puin un soldat din ea nu mai are cartue (n acel moment toi soldaii de pe zona de aprare respectiv sunt omori de inamic). Se tie c soldaii de pe aceeai zon de aprare trag la un interval de o secund, n acelai timp. Dup ce o zon de aprare este distrus, imediat n secunda urmtoare intr n aciune zona de aprare urmtoare. Cerin S se determine dup cte secunde va cuceri inamicul obiectivul pzit. Date de intrare n fiierul sold.in se afl pe prima linie n, iar pe urmtoarele n linii coordonatele poziiei soldailor 1, 2, , n mpreun cu numrul de cartue pe care le au separate prin cte un spaiu (ordinea pe linie este urmtoarea: abscis, ordonat i numr cartue).

16
www.ls-infomat.ro | www.manuale-de-informatica.ro

Date de ieire n fiierul sold.out se va scrie numrul de secunde cerut. Restricii n -numr natural nenul <3200 coordonatele poziiei soldailor sunt numere ntregi din intervalul [-32000, 32000]. numrul de cartue pentru fiecare soldat este natural nenul i <1000000. Exemplu sold.in sold.out 11 30 5 0 23 0 2 100 4 3 20000 5 4 10 2 1 301 0 0 45 3 4 567 2 3 342 2 0 2123 3 2 90 4 1 20 Timp maxim de execuie/test: 1 secund

(.campion, 2004)
7. Ionic a primit de ziua lui de la tatl su un joc format din piese de form de triunghiular de dimensiuni diferite i o suprafa magnetic pe care acestea pot fi aezate. Pe suprafaa magnetic este desenat un triunghi dreptunghic cu lungimile catetelor a, respectiv b i un sistem de coordonate xOy cu originea n unghiul drept al triunghiului, semiaxa [Ox pe cateta de lungime a, respectiv semiaxa [Oy pe cateta de lungime b. La un moment dat Ionic aeaz pe tabla magnetic n piese, pentru care se cunosc coordonatele vrfurilor lor. Tatl lui Ionic vrea s verifice dac pe tabl piesele realizeaz o partiie a triunghiului dreptunghic desenat, adic dac sunt ndeplinite condiiile: nu exist piese suprapuse; piesele acoper toat poriunea desenat (n form de triunghi dreptunghic); nu exist poriuni din piese n afara triunghiului desenat. Cerin Se cere s se verifice dac piesele plasate pe tabla magnetic formeaz o partiie a triunghiului desenat pe tabla magnetic. Date de intrare Fiierul de intrare part.in conine pe prima linie un numr natural k, reprezentnd numrul de seturi de date din fiier. Urmeaz k grupe de linii, cte o grup pentru fiecare set de date. Grupa de linii corespunztoare unui set este format dintr-o linie cu numerele a, b, n separate ntre ele prin cte un spaiu i n linii cu cte ase numere ntregi separate prin spaii reprezentnd coordonatele vrfurilor (abscis ordonat) celor n piese, cte o pies pe o linie. Date de ieire n fiierul part.out se vor scrie k linii, cte o linie pentru fiecare set de date. Pe linia i (i=1, 2, , k) se va scrie 1 dac triunghiurile din setul de date i formeaz o partiie a triunghiului desenat pe tabla magnetic sau 0 n caz contrar. Restricii 1 n 150 1 k 10 a, b sunt numere ntregi din intervalul [0, 31000] Coordonatele vrfurilor pieselor sunt numere ntregi din intervalul [0, 31000].

17
www.ls-infomat.ro | www.manuale-de-informatica.ro

Exemplu part.in 2 20 10 4 0 5 0 10 10 5 0 0 10 5 0 5 0 0 10 0 10 5 10 0 20 0 10 5 20 10 2 0 0 0 10 10 5 0 0 20 0 20 10 part.out 1 0

Timp maxim de execuie: 0.3 secunde/test

(Baraj, 2006)
8. ntr-un document arheologic recent descoperit se face referire la un mare tezaur. Datorit faptului c documentul poate fi interpretat n mai multe moduri se face apel la n arheologi care vor studia independent documentul. La terminarea studiului fiecare arheolog ntocmete o hart pe care marcheaz o zon poligonal nchis i convex ce este considerat a conine tezaurul. Pentru c fondurile alocate pentru descoperirea tezaurului sunt reduse se ia hotararea s se ncep cercetrile pe teren doar n zona de pe hart precizat de toi arheologii. Cunoscnd n i coordonatele vrfurilor zonelor determinate de arheologi se cere s se determine suprafaa (aria) zonei de pe hart precizat de toi arheologii (intersecia celor n zone Date de intrare: Fisierul de intrare TEZAUR.IN conine: n m[1] -numrul de vrfuri pentru zona primului arheolog -coordonatele varfurilor zonei primului arheolog x11 y11 ... x1 y1m[1] ... (date in sens direct sau invers acelor de ceasornic) m[n] -numarul de varfuri pentru zona ultimului arheolog x1m[n] y1m[n] ... xnm[n] ynm[n] -coordonatele varfurilor zonei celui de-al n-lea arheolog (date in sens direct sau invers acelor de ceasornic) Date de ieire: Ieirea se va face n fiierul TEZAUR.OUT ce va conine pe prima linie suprafaa (aria) zonei de pe hart precizat de toi arheologii. Observaie: Dac nu exist suprafa comun zonelor celor n arheologi se va scrie n fiierul TEZAUR.OUT valoarea 0. Exemplu: TEZAUR.IN TEZAUR.OUT 3 300.0000 4 -20 30 40 30 40 -20 -20 -20 5 10 -30 60 -50 100 60 70 80 10 80 5 40 0 70 0 70 60 20 60 20 30 Restricii: 1n30; 3mi20, i{1,2,,n}; Coordonatele vrfurilor zonelor sunt numere ntregi din intervalul [-10000, 10000]; Numrul din fiierul de ieire se va scrie cu 4 zecimale. Timp maxim de execuie pe test: 1 secund (ONI, Constana, 2000)

18
www.ls-infomat.ro | www.manuale-de-informatica.ro

9. Se dau N ptrate situate n plan, avnd laturile paralele cu axele de coordonate. Coordonatele vrfurilor sunt numere ntregi. Ptratele nu se ating i nu se suprapun. Se cere s se determine numrul de ptrate vizibile din originea O, O=(0,0). Un ptrat este vizibil din originea O, dac exist dou puncte distincte A i B de coordonate ntregi, situate pe o aceeai latur a ptratului, astfel nct interiorul triunghiului OAB nu are puncte comune cu nici unul dintre celelalte ptrate. Date de intrare Prima linie a fiierului de intrare SQUARES.IN conine un numr ntreg N, 1<=N<=1000, reprezentnd numrul de ptrate. Fiecare din urmtoarele N linii descrie un ptrat prin numerele ntregi X,Y i L separate prin cte un spaiu 1<=X,Y,L<=10000. X i Y sunt coordonatele colului din stnga jos al ptratului, iar L este lungimea laturii. Date de ieire Prima (i singura) linie a fiierului de ieire SQUARES.OUT trebuie s conin numrul ptratelor vizibile din origine. Exemple SQUARES.IN 3 2 6 3 1 4 1 3 4 1 SQUARES.IN 4 1 2 1 3 1 1 2 4 2 3 7 1 SQUARES.OUT 3

SQUARES.OUT 2

(CEOI, Croaia, 1998)


10. N soldai din ara Caroiaj sunt aezai la ntmplare pe teritoriul rii. O poziie n ara Caroiaj este dat de coordonatele (x,y), numere ntregi. Soldaii pot s-i schimbe poziia astfel: ntr-o mutare, un soldat poate s se deplaseze cu o unitate n sus, n jos, la stnga sau la dreapta (i schimb fie coordonata x, fie coordonata y cu 1 sau -1). Soldaii vor s se alinieze pe orizontal, unul lng altul (astfel nct poziiile lor finale vor fi (x,y), (x+1,y), , (x+N-1,y), pentru un anumit x i y). ntregii x i y sunt oarecare. Ordinea final a soldailor pe linie, este de asemenea oarecare. S se determine numrul minim de interschimbri de poziie a tuturor soldailor, necesare pentru aliniere. Doi sau mai muli soldai nu pot ocupa n acelai timp aceeai poziie. Date de intrare Prima linie a fiierului SOLDIERS.IN conine un numr ntreg N, 1<=N<=10000, reprezentnd numrul de soldai. Urmtoarele N linii conin poziiile iniiale ale soldailor: pentru orice i, 1<=i<=N, linia i+1 conine o pereche de numere ntregi x[i] i y[i] separate printr-un singur spaiu, reprezentnd coordonatele ptratului i, -10000<=x[i],y[i]<=10000. Date de ieire Prima i singura linie a fiierului de ieire SOLDIERS.OUT va conine numrul minim total de schimbri de poziie a soldailor, necesar pentru aliniere.

19
www.ls-infomat.ro | www.manuale-de-informatica.ro

Exemple SOLDIERS.IN 3 1 0 2 4 3 2 SOLDIERS.IN 5 1 2 2 2 1 3 3 -2 3 3 SOLDIERS.OUT 4

SOLDIERS.OUT 8

(CEOI, Croaia, 1998)

Bibliografie
1. Grigore Albeanu, Algoritmi geometrici elementari, Gazeta de Informatic, 4-5, 1998 2. T. Cormen, C.Leiserson, R. Rivest, Introducere n algoritmi, Ed. Agora, 2000 3. Victor Mitrana, Provocarea algoritmilor, Ed. Agni, 1994 4. Mihai Scoraru, Informatica pentru grupele de excelen, Ed. Dacia, 2004 5. E. Cerchez, M. erban, Programarea n limbajul C++, III, Ed. Polirom, pg. 2258.

20
www.ls-infomat.ro | www.manuale-de-informatica.ro