Sunteți pe pagina 1din 10

Permutri

prof. Nistor Mo

1. Noiuni introductive
Se numete permutare o funcie bijectiv p:AA. De obicei se consider A=1,2,

...

dar toate
,n i permutarea se scrie sub forma
p (1) p (2) p (3) ... p ( n)
rezultatele rmn valabile dac se nlocuiete mulimea 1,2,n cu orice mulime cu
n elemente (evident, n programare nu se lucreaz cu mulimi infinite). De asemenea
ordinea numerelor din primul rnd este neesenial, de exemplu permutarea
1

2
poate fi scris i
3
4

, n ambele cazuri p(1)=2, p(2)=4,

etc.
Vom nota mulimea permutrilor lui 1,2,,n cu Sn .
Se numete permutarea identic (i se noteaz de obicei cu e) funcia identic a
mulimii A (1A) adic permutarea p n care p(1)=1, p(2)=2,,p(n)=n.
Se numete punct fix al unei permutri pSn un numr x1,2,,n pentru care
avem p(x)=x. Evident permutarea identic are n puncte fixe
Se numete transpoziie o permutare pSn cu n2 puncte fixe. Dac p(i)=j i
p(j)=i, restul valorilor fiind puncte fixe, transpoziia se mai noteaz i (i j).
Operaia de baz n mulimea Sn este compunerea permutrilor, o vom nota cu o
permutrile fiind funcii este vorba despre compunerea funciilor. Se cunosc
proprietile :
compunerea este asociativ adic (poq)or=po(qor)
compunerea nu este comutativ - adic n general poq qop
permutarea identic este element neutru adic poe=p i eop=p
fiecare permutare are o permutare invers astfel nct compunnd cele dou
permutri obinem permutarea identic - pop1 = e i p1op = e. Inversa unei permutri
se poate obine inversnd cele dou rnduri, apoi eventual reordonnd tabloul n
ordinea cresctoare a numerelor de pe primul rnd. Pentru exemplul de mai sus
1

inversa este
3 1 4 2
O transpoziie compus cu ea nsi d permutarea identic, deci este propria ei
invers.
Problema 1.
Calculai cte cifre are numrul de permutri pentru n1000000000.
Rezolvarea se poate face folosind proprietile logaritmilor : lg n! = lg 1 + lg 2 +
+ lg n, partea ntreag a logaritmului zecimal +1 ne va da numrul de cifre. Dar un
for mergnd de la 1 la 1000000000 depete timpul normal pentru execuia unui
program (dac calculatorul adun 10.000.000 logaritmi pe secund vor fi necesare
100 secunde !). Exist o formul celebr (formula lui Stirling) ce aproximeaz foarte
bine (pentru numere mari) pe n!, pentru n>100 numrul de cifre va fi dat fr eroare
de aceast formul, chiar i primele cifre sunt date corect. Formula este :
n

n!

2n (n formul apar dou numere iraionale e2,71 i 3,14)

Cu aceast formul logaritmul lui n! se calculeaz imediat n(lg nlg e)+(lg n+lg
2)/2.

2. Inversiuni
Se numete inversiune a unei permutri pSn o pereche (i,j) cu 1i<jn i
p(i)>p(j). Numrul inversiunilor unei permutri joac un rol important n multe
aplicaii ale permutrilor.
Problema 2. (din lista lui Frncu)
PROBLEMA 7:
Permutari (part I)
DEADLINE:
Duminica, 24 ianuarie 1999
TIMP DE IMPLEMENTARE: 90 minute
DOMENIU:
Nascocire de formule
Se dau doua numere naturale N si K, 1<=N<=45, 0<=K<=N*(N-1)/2. Sa se tipareasca numarul de
permutari ale multimii {1, 2, ..., N} in care exista K inversiuni.
INTRAREA: Fisierul PERM.IN contine o singura linie pe care se afla
valorile lui N si K, despartite printr-un spatiu.
IESIREA: Pe ecran se va afisa un singur numar (nimic altceva, svp)
respectiv numarul de permutari cu K inversiuni.
EXEMPLE:
PERM.IN
Raspuns
30
1
PERM.IN
Raspuns
42
5
COMPLEXITATE RECOMANDATA: O(N^2*C), unde C este numarul de cifre al raspunsului.
TIMP DE EXECUTIE: O secunda pe un Cyrix/166/96 MB RAM/Windows '95
Bafta!
------------BREVIAR: PERMUTARI (pentru cei mici)
Permutarile unei multimi sunt toate ordinile posibile in care putem
aseza elementele acelei multimi. De exemplu, permutarile multii {1, 2, 3} sunt:
123, 132, 213, 231,
312, 321
Se poate arata ca numarul permutarilor unei multimi cu N elemente este egal cu N!.
Dandu-se o permutare P, numarul de inversiuni al ei este numarul de perechi (i,j) pentru care i<j si
P[i]>P[j]. De exemplu, pentru
permutarea cu 5 elemente: P=52314, perechile (i,j) in dezordine sunt:
(1,2): 1<2 dar 5>2
(1,3): 1<3 dar 5>3
(1,4): 1<4 dar 5>1
(1,5): 1<5 dar 5>4
(2,4): 2<4 dar 2>1
(3,4): 3<4 dar 3>1
Asadar permutarea in cauza are 6 inversiuni. Numarul minim de
inversiuni al unei permutari de N elemente este 0 (pentru permutarea
1 2 3 ... N-1 N), iar numarul maxim de inversiuni este N*(N-1)/2
(pentru permutarea N N-1 ... 3 2 1).
Cam atat ajunge, pentru inceput. Mai am in minte o problema cu permutari.

Rezolvarea este tot pe lista lui Frncu, se bazeaz pe o formul de recuren.


n 1 pag. 51 exist un exerciiu care d cteva formule pentru calculul
rezultatului cerut de problem.
La conursul de programare Agora organizat de GInfo s-a dat problema urmtoare
(existent n 2, pag. 16) :
Problema3.
Se d un vector a care conine n (2n10000) elemente i se cere determinarea
numrului de perechi (i,j) cu proprietatea c i<j i ai>aj (timp de execuie 1s !)
Problema e rezolvat i comentat n GInfo 11/5, an 2001.

3. Ordinul unei permutri


Se numete ordinul permutrii pSn cel mai mic numr nN* cu proprietatea c
p =e (prin pn nelegnd popopop, p compus cu el nsui de n ori)
Demonstrarea existenei unui astfel de numr :
Considerm irul p,p2,p3,p100, .Cum exist doar un numr finit de permutri n
Sn (adic n!) irul scris trebuie s conin permutri care se repet de mai multe ori, fie
pa = pb (a>b). Atunci pab = e, prin compunere cu pb (adic inversul lui pb sau
(p1)b ).
Noiunea e necesar n rezolvarea unor probleme de genul :
Problema 4.
Fie pSn o permutare i kN*. Determinai pk . Fiierul de intrare PERM.IN
conine pe prima linie numerele n i k, iar pe linia a doua cele n numere ce formeaz
permutarea. {n fiierul PERM.OUT se va scrie rspunsul sub forma unui ir de
numere scrise pe o linie cu cte un spaiu ntre numere. 2n1000, 1k1000000000.
Pentru determinarea ordinului unei permutri se folosete descompunerea
permutrii n cicluri.
n

1
3

S pornim de la un exemplu. Fie p

. Avem p(1)=3, p2(1) =

p(p(1))=p(3)=2, p3(1)=p(p(p(1)))=p(2)=1, deci dup 3 permutri 1 a ajuns pe poziia


1, parcurgnd ciclul 1321. S observm c 2 i 3 urmeaz un drum analog :
2132 i 3213. Asementor gsim ciclul 454. Deducem c dac 1,2
i 3 ajung n poziiile 1,2,3 la p3, p6, p9, adic din 3 n 3 permutri iar 4 i 5 ajung pe
poziiile 4, respectiv 5, la p2, p4, ordinul permutrii va fi cmmmc al numerelor 2 i
3, adic 6. S menionm c ciclurile se scriu asemntor transpoziiilor, n cazul
nostru (1 3 2) respectiv (4 5). Se numete lungimea unui ciclu numrul elementelor
(distincte) ce alctuiesc ciclul. Un punct fix formeaz un ciclu de lungime 1, o
transpoziie, un ciclu de lungime 2.
Cum determinm deci ordinul unei permutri ? Se pornete de la 1, parcurgnd
vectorul ce reprezint permutarea i marcnd elementele 1, p1, pp1, pn
ajungem la un element marcat (adic la 1), numrnd numrul de pai n l1. Cutm
primul element nemarcat din vector i relum parcurgerea, efectund l2 pai. Cnd nu
mai avem elemente nemarcate calculm cmmmc al numerelor l1,l2,lk. Marcarea se
poate face schimbnd semnul numerelor din vector, iar cmmmc se poate calcula la
fiecare pas, fr a mai fi necesar memorarea n alt vector a numerelor l1,l2,l3,
dup regula cmmmc(x1,x2,x3,,xn) = cmmmc(cmmmc(x1,x2,xn1),xn).
Problema urmtoare cere determinarea ordinului unor permutri particulare i este
inspirat dintr-o problem clasic prezentat n 3, surs de inspiraie pentru multe
probleme interesante de informatic.
Problema 5. propus la O.J.I. Brila 1998

Clasa a XI-a etapa judeean


(problem uoar)

Un exerciiu militar cere soldailor s se aeze n ir indian, apoi fiecare al doilea


trece n spatele celui dinaintea lui; n continuare rndul din spate efectueaza o manevr
de ocolire sub conducerea fostului ultim soldat, trecnd naintea celorlalti :
din 1 2 3 4 5 6 7 8 se obine : 1 3 5 7
apoi 8 6 4 2 1 3 5 7
2468

Se presupune c numrul soldailor este par i ei pot efectua manevra de cte ori
dorete comandantul lor (dei e evident c dup un anumit numr de operaii se
ajunge la poziia iniial).
Problema cere ca pentru dou numere naturale pare 5000 reprezentnd numrul
soldailor a dou companii s determinai care trebuie s efectueze mai multe astfel de
manevre pentru a ajunge la poziia iniial.
Atenie! nu e deloc obligatoriu ca pentru un numr mai mare de soldai s fie
nevoie de mai multe manevre: pentru 10 soldai snt necesare 6 manevre, pentru 16
soldai numai 5 .
Datele de intrare se citesc de la tastatur (dou numere indeplinind condiiile date)
iar rezultatele se afiseaza pe ecran tot dou numere, reprezentnd numrul de
manevre al fiecrei companii pn la revenirea n poziia iniial a ambelor companii,
cu semnul < sau > ntre ele.

4. Funcii nebijective
Ceva asemntor se ntmpl n cazul funciilor f:AA, nebijective (A=1,2,n
i aici putem considera irul de funcii obinut prin compunerea lui f cu el nsui :
2 3
f, f ,f ,Numrul total de funcii e mai mare ca la permutri (este nn), dar tot un
numr finit va fi, ceea ce nseamn c vor exista numerele naturale 0<p<q astfel ca fp
= fq (a nu se confunda fp cu ridicarea la putere, adic nmulirea lui f cu el nsui, e
posibil ca ff s nu fie o funcie :AA). Dar atenie, dac f nu e bijectiv nu vom
obine niciodat funcia identic. Totui se poate pune problema gsirii celor mai mici
numere p i q (p<q) pentru care fp=fq. n irul de funcii va exista o parte neperiodic
f,f2,f3,,fp1 dup care urmeaz partea periodic fp,fp+1,,fq1 care se va repeta : fq,fq+1,
,fq1+(qp) din qp n qp ori.
Problema 6.
/* 1. In tara Maniaro birocratia este foarte bine organizata, dimineata se prezinta la ghisee (ghisee
numerotate cu numere de la 1 la N, N<=5000) N persoane, cate o persoana la fiecare ghiseu.
Instructiunile prevad clar ce trebuie sa faca functionarul de la ghiseul i cu un eventual solicitant : sa-l
trimita la ghiseul j (1<=i,j<=N). Consideram ca deplasarile de la un ghiseu la altul se fac intr-o unitate
de timp. Cititi din fisierul p1.in numarul N si un sir de N numere separate prin spatii (numarul de pe
pozitia i arata unde va fi trimisa persoana de la ghiseul i). Va trebui sa scrieti
in fisierul p1.out doua numere naturale p,q (p<q) reprezentand cele mai mici valori pentru care dupa p
si dupa q unitati de timp cele n persoane se afla la aceleasi ghisee.
Exemplu :
n=5 3,1,4,3,2 => raspunsul 3,5 */

Problema a fost prezentat la o edin de pregtire cu lotul de informatic anul


trecut la Slatina

5. Probleme de numrare
Se pun uneori probleme n care se cere numrarea unor permutri cu diverse
proprieti. Exemplificm cu dou astfel de probleme
Problema 7.
Se da n<=100. Cate permutari p din Sn verifica p*p=e

Se va deduce relaia de recuren T(n)=T(n1)+(n1)*T(n2) astfel : Permutarea


trebuie s conin numai cicluri de lungime 1 sau 2. Dac p(n)=n cele n1 numere din
faa lui n pot fi aezate n T(n1) moduri pentru a obine o permutare cu proprietatea
din enun. Dac p(n)n, va exista k<n astfel ca p(n)=k i p(k)=n (altfel n ar face parte
dintr-un ciclu de lungime >2). Numerele din1,2,3,,n-(k,n pot fi aezate in T(n
2) moduri i cum k poate fi oricare din cele n1 numere avem (n1)*T(n2) permutri
ce verific relaia cerut n care p(n)n. Totalul va fi dat de suma celor doi termeni.

Ca observaie pentru obinerea rspunsului corect e necesar implementarea


operaiilor cu numere mari, chiar dac numrul cerut este o fraciune foarte mic din
totalul permutrilor (de exemplu o milionime), totui pentru n>50 rezultatul depete
numrul de cifre exacte ale tipurilor numerice cunoscute.
Problema 8.
Considerm n persoane numerotate de la 1 la n (n1000) care iau masa zilnic,
aezai la o mas circular. Dorim s aezm persoanele astfel nct n fiecare zi s
aib vecini diferii.
a) Afiai numrul maxim de zile n care niciunul din vecinii vreunei persoane n-a
mai fost vecin n zilele anterioare i dai un exemplu de astfel de aezare
b) Gsii numrul maxim de zile dac n fiecare zi trebuie s fie cel puin un vecin
diferit fa de zilele precedente (adic numrul maxim de aranjri diferite)
Exemplu : pentru n=5 a) dou zile : 1-2-3-4-5, 1-4-2-5-3
b) 6 zile
Rezolvarea prin generarea tuturor aranjamentelor este evident ineficient.

6. Probleme cu inegaliti
Se cunosc din celebrele culegeri de probleme de algebr (gen Nstsescu&Ni)
exerciii de genul :
Pentru ce permutare pSn suma 1/p(1)+2/p(2)++n/p(n) este minim / maxim?
Pentru ce permutare suma 1-p(1) + 2-p(2) + + n-p(n) este minim / maxim
Se dau numerele x1<x2<<xn. Gsii permutarea p pentru care suma (x1xp(1))2 +
(x2xp(2))2 + + (xnxp(n))2 este minim/maxim.
La aceste ntrebri rspunsul este de obicei permutarea identic pentru minim i
1

...

pentru maxim sau invers.


permutarea
n n 1 n 2 ... 1
Un exemplu clasic :
Se d un ir de n numere reale pozitive (n10000), x1,x2,xn. Gsii o permutare
pSn pentru care suma x1p(1)+x2p(2)++xnp(n) este maxim.
Nu ntotdeauna rspunsul la astfel de probleme este una din cele dou permutri.
Problema 9.
Determinai permutarea p din Sn pentru care |p1-p2|+|p2-p3|+...+|pn-p1| este maxim
Sol. pt n par avem p(2k+1)=n/2-k, p(2k+2)=n-k (k=0,1,..n/2-1)
pt. n impar p(2k+1)=[n/2]-k, p(2k+2)=n-k (k=0,1,...[n/2]+1)

sau

Problema 9.

Determinai permutarea p din Sn pentru care p1p2+p2p3++pnp1 este maxim


Sol. permutarea pentru maxim este (1,2,4,6,,7,5,3) iar pt. minim (1,n,2,n-2,5,n-3,3,n-1)

Soluia de la prob.9 amintete de o foarte actual problem (dat la Olimpiada-online, etapa 15 oct 14 nov. 2001) n care se cere numrul permutrilor n zig-zag.
Considerm funcia E:Sn N, E(p)= 1*p(1)+2*p(2)++n*p(n).
Este funcia E injectiv sau surjectiv ?
- Injectiv nu este deoarece E(p) = E(p1)
- E ia valoarea maxim pentru p=e i valoarea minim pentru p=
1

...

n 1

n2

...

deci ia valori ntre min=n (n+1)(n+2)/6 i max=n (n+1) (2n+1)/6, aadar funcia nu
e nici surjectiv. Dar dac restrngem codomeniul la intervalul min, max putem

demonstra c E ia toate valorile din acest interval ? Pentru un SN* putem gsi pSn
astfel ca E(p)=S ?
Acesta este enunul foarte puin modificat al unei probleme date la barajul pentru
lotul internaional n 2001 la Bacu
Problema 10 Baraj ONI 2001

Potrivire
Se considera doua numere naturale nenule N si S.
Cerinta
Determinati numerele distincte x1, x2, ... , xN apartinand multimii {1, 2, , N} astfel incat:
1 * x1 + 2 * x2 + ... + N * xN = S.
Date de intrare
Fisier de intrare: POTRIV.IN
Linia 1: N S
doua numere naturale nenule, separate printr-un spatiu, reprezentand numarul de numere,
respectiv suma ce trebuie obtinuta.
Date de iesire
Fisier de iesire: POTRIV.OUT
Linia 1: x1 x2 ... xN
N numere naturale nenule, separate prin cate un spatiu, reprezentand solutia problemei. Daca
nu exista solutie, pe aceasta linie se va scrie numarul 0.

Restrictii

2 <= N <= 1000


1 <=S <= 1000000000 (un miliard)
daca exista mai multe solutii, in fisier se va scrie una singura.

Exemplu
POTRIV.IN
4 26
POTRIV.OUT
3214
Explicatie
1*3 + 2*2 + 3*1 + 4*4 = 26
Timp maxim de executare/test: 1 secunda

Rezolvarea propusa de reprezentantul judeului Brila la baraj. Dac S nu este n


intervalul min,max nu exist soluie. Altfel pornim cu permutarea identic, care d
suma maxim i facem transpoziii pn ajungem la suma S. Fiecare transpoziie
micoreaz suma (notat anterior cu E(p)). Dac schimbm p(i) cu p(j), restul
elementelor rmnnd neschimbate, suma scade cu (ij)*(p(i)p(j). De aici mai e un
pas (dar nu banal) pn la obinerea soluiei.

7. Codul Gray
Considerm graful n care nodurile sunt permultri din Sn iar ntre dou permutri
avem muchie dac permutrile difer doar n dou poziii adiacente (de ex. n S5 avem
muchie ntre (13524) i (13254), dar nu ntre (13524) i (12534)).Gsii un ciclu
hamiltonian n acest graf.
Cu alte cuvinte s generm permutrile ntr-o ordine asemntoare codului Gray
(chiar mai restrictiv), pornind de la permutarea identic i interschimbnd de fiecare
data cte dou valori alturate. Faptul c e posibil acest lucru rezult prin inducie:
presupunnd c am generat un astfel de ir al permutrilor din Sn1, pentru generarea
permutrilor din Sn trebuie doar s adugm pe n n mod convenabil.

Exemplificm pentru n=4. Aezm pe primul rnd al unei matrice irul de


permutri generat pentru 3 (adic 123, 132, 312, 321, 231, 213) iar pe fiecare coloan
intercalm pe 4 n toate poziiile pornind de la sfrit:
1234 1324 3124 3214 2314 2134
1243 1342 3142 3241 2341 2143
1423 1432 3412 3421 2431 2413
4123 4132 4312 4321 4231 4213
Acum parcurgnd matricea pe coloane alternativ (de sus n jos apoi de jos n sus
etc) obinem irul de permutri dorit.
O legtur mai strns cu codul Gray se obine numrnd inversiunile fiecrei
permutri. Se obine codul Gray pentru baza mixt 1,2,3,4.
Algoritmul de generare de mai sus
P1: c=(0,0,0,,0); d=(1,1,1,,1) (vectorul c pentru inversiuni, d pt. direcie)
P2: viziteaza permutarea a1a2an
P3: j=n; s=0 (s este numrul indicilor k>j pt. care ck=k1)
P4: q=cj+dj. Dac q<0 mergi la P7, dac q=j mergi la P6
P5: schimb ajcj+s <-> aj-q+s; cj=q; mergi la P2
P6: dac j=1 stop altfel s=s+1
P7: dj=dj; j=j1; mergi la P4
Problema 11
Se d o permutare din Sn. A cta este generat de procedeul anterior?
Mergnd pe ideea de mai sus, cu graful avnd Sn ca mulime de noduri, fie Q={p1,
p2, pk} o mulime de permutri. Vom lega prin muchii fiecare permutare p cu cele k
permutri pop1, pop2, popk. Mai putem gsi un ciclu hamiltonian? n general nu.

8. Probleme finale
ncheiem cu dou probleme, una uoar, legat tot de descompunerea unei
permutri n cicluri i o problem frumoas, dar grea, dat la Olimpiada Internaional
de Informatic din China n 2000.
Problema 12.
Rezolvai ecuaia x3 = y, x i y fiind permutri din Sn (n1000).
n fiierul de intrare EC.IN e scris pe prima linie numrul n, iar pe linia
urmtoare numerele y(1),y(2),y(n) cu cte un spaiu ntre ele. {n fiierul de ieire
EC.OUT trebuie s scriei permutarea x, numerele x(1),x(2),x(n) fiind scrise pe o
linie, cu spaii ntre ele. Dac sunt mai multe soluii, se va scrie una singur, dac nu
exist soluii se va scrie numrul 0.
Problema se poate rezolva prin ncercri, se obine un algoritm cubic, acceptabil
pentru valori mai mici ale lui n. Pentru valori mari apelm din nou la descompunerea
1
3

n cicluri. Fie p

= (1 3 6 4)(2 5). Avem p3=(1 4 6 3)(2 5).

Se observ c un ciclu de lungime l>3, l nedivizibil cu 3, compus de 3 ori cu el nsui


d tot un ciclu de lungime l. Afirmaia e valabil i pentru cicluri de lungime 1 sau 2.
Pentru ciclurile de lungime l divizibil cu 3, prin compunerea de 3 ori se obin 3
cicluri de lungime l/3. Reconstituirea, dac e posibil se face destul de uor.
O varianta mai literara:
Cea de-a doua problem final difer de cele de pn aici nu numai prin gradul de
dificultate i prin modul de obinere a datelor de intrare sau de ieire.

Problema cere n fond identificarea termenului median dintr-o permutare pSn


(n<1500), adic p1((n+1)/2) Singura problem e c nu se d permutarea ci un
dispozitiv (o funcie) care ne spune pentru 3 numere a,b,c{1,2,n} care din
numerele p(a), p(b), p(c) este ntre celelalte dou. Dispozitivul (funcia) poate fi apelat
de max. 7777 ori. Enunul complet este :
Problema 13. Puterea median, IOI 2000
Un experiment implic N obiecte, etichetate de la 1 la N. Se tie c N este impar.
Fiecrui obiect i se ataeaz o informaie (numit putere) care este necunoscut i care
este exprimat printr-un numr natural; puterile obiectelor sunt distincte. Fiecare
putere P satisface relaia 1PN. Obiectul de putere median este obiectul X cu
proprietatea c numrul de obiecte cu puterea mai mic dect puterea lui X este egal
cu numrul de obiecte cu putere mai mare dect puterea lui X. Scriei un program care
determin obiectul de putere median. Din nefericire, singurul mod de a compara
puterile este bazat pe un dispozitiv care, pentru 3 obiecte distincte date, determin pe
acela dintre ele care are puterea median.
Biblioteci
Este dat biblioteca device care conine 3 subprograme :
GetN trebuie apelat o singur dat, la nceput, nu are argumente i returneaz
valoarea N
Med3 trebuie apelat cu etichetele a 3 obiecte distincte ca argumente i
returneaz eticheta obiectului de putere median
Answer trebuie apelat o singur dat la sfrit i are ca argument eticheta unui
obiect; acest obiect ar trebui s fie cel care are puterea median; aceast operaie
este cea care ncheie executarea programului.
Biblioteca device este folosit pentru a crea dou fiiere text MEDIAN.OUT i
MEDIAN.LOG. Prima linie a fiierului MEDIAN.OUT conine un ntreg indicnd
eticheta obiectului transmis ca parametru n apelarea subprogramului Answer. A doua
linie conine un numr ntreg care indic numrul de apeluri ale subprogramului Med3
efectuate de programul dumneavoastr. Dialogul ntre program i bibliotec este
memorat n fiierul MEDIAN.LOG.
Programatorii n Pascal trebuie s include n codul surs instruciunea uses device;
Programatorii n C/C++ trebuie s include n codul surs instruciunea #include
device.h.
Trebuie creat proiectul MEDIAN.PRJ i apoi adugate fiierele MEDIAN.C
(MEDIAN.CPP) i DEVICE.OBJ n acest proiect.
Experimentare
Lucrul cu biblioteca se poate experimenta crend un fiier text DEVICE.IN.
Fiierul trebuie s conin dou linii. Prima linie conine un ntreg: numrul N al
obiectelor. A doua linie conine numere ntregi de la 1 la N ntr-o ordine oarecare, al ilea ntreg reprezentnd puterea obiectului etichetat cu i.
Exemplu
DEVICE.IN
5
25431
Fiierul descrie o intrare cu 5 obiecte i puterile lor.
Etichet : 1 2 3 4 5
Putere : 2 5 4 3 1
O secven este format din urmtoarele 5 apeluri :
1. GetN (n Pascal) sau GetN() (n C/C++) returneaz 5

2. Med3(1,2,3) returneaz 3
3. Med3(3,4,1) returneaz 4
4. Med3(4,2,5) returneaz 4
5. Answer(4).
Restricii
Numrul N al obiectelor este impar i 5N1499
Orice etichet i satisface relaia 1iN
Orice putere satisface relaia 1YN; puterile sunt distincte
Numele bibliotecii Pascal este DEVICE.TPU
Declaraiile subprogramelor Pascal sunt :
function GetN : Integer;
function Med3(x,y,z:Integer) : Integer;
procedure Answer(m:integer);
Numele bibliotecilor C/C++: DEVICE.H, DEVICE.OBJ (folosii modelul de
memorie large)
Header-ele funciilor C/C++ sunt :
int GetN(void);
int Med3(int x, int y, int z);
void Answer(int n);
La o rulare sunt permise cel mult 7777 de apeluri ale subprogramului Med3
Programul dumneavoastr nu trebuie s conin instruciuni explicite de
citire/scriere din/n vreun fiier; citirile/scrierile se realizeaz prin intermediul
subprogramelor din biblioteci.

9. Tem
1. Citii enunul i rezolvarea problemei 13 de pe site-ul
http://olympiads.win.tue.nl/ioi
2. Rezolvai ecuaia y3 = x, unde x,y Sn (n<=1000) (problema 12)
3. Rezolvai problema 10 (problema lui Mihai Stroe Stroe de la Baraj)
4. Gsii pn pentru n mare (problema 2)

BIBLIOGRAFIE
1. I. Tomescu Probleme de combinatoric i teoria grafurilor, Ed.Didactic i
Pedagogic - Bucureti 1981
2. T.Cormen, C Leiserson, R.Rivest Introducere n algoritmi, Ed. Computer
Libris Agora Cluj Napoca 2000
3. A.P.Domoread Jocuri i probleme distractive de matematic , Ed. Didactic i
Pedagogic - Bucureti 1965
4. D.Knuth Arta programrii calculatoarelor vol.1, Ed. Tehnic Bucureti 1977
5. V. Mitrana Provocarea algoritmilor, Editura Agni Bucureti 1994
6. C.Nstsescu, C.Ni, M.Brandiburu, D.Joia Exerciii i probleme de algebr,
Ed. Didactic i Pedagogic - Bucureti 1983
7. I.Tomescu Introducere n combinatoric, Ed. Tehnic - Bucureti 1972

8. Seria GInfo numerele 8/1 10/8, 1998-2001.

S-ar putea să vă placă și