1201 Probleme Olimpiada Informatica

Embed Size (px)

Citation preview

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    1/57

    1. Problemele Olimpiadelor de Informatic

    1.1. Faza Local Cluj-Napoca, 2003

    1.1.1. NumereSe consider un numr natural Ncuprins ntre 1 i 16. Va trebui s construii un ircare conine toate numerele cuprinse ntre 1 i 2N astfel: se pornete cu irul care conine numerele 1 i 2; naintea acestui ir este inserat numrul 3, iar la sfritul irului este inserat num-

    rul 4, obinndu-se irul 3, 1, 2, 4; naintea acestui ir sunt inserate numerele 5 i 6, iar la sfritul irului sunt insera-

    te numerele 7 i 8, obinndu-se irul 5, 6, 3, 1, 2, 4, 7, 8;

    procedeul continu pn la inserarea tuturor celor 2

    N

    numere.Aadar, la fiecare pas iirul va conine primele 2inumere i naintea sa vor fi inse-

    rate urmtoarele 2i-1numere, iar la sfritul su vor fi inserate urmtoarele 2i-1numere.

    Date de intrareFiierul de intrareNUMERE.INva conine o singur linie pe care se va afla valoareaN.

    Date de ieireFiierul de ieireNUMERE.OUTva conine o singur linie pe care se vor afla cele 2Nelemente ale irului construit potrivit regulilor prezentate anterior. Elementele irului

    vor fi separate prin cte un spaiu.

    ExempluNUMERE.IN NUMERE.OUT

    4 9 10 11 12 5 6 3 1 2 4 7 8 13 14 15 16

    Timp de execuie: 1 secund/test

    1.1.2. TriunghiSe consider un triunghi (determinat de trei puncte necoliniare din plan) i alte Npuncte din plan.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    2/57

    12 Problemele Olimpiadelor de Informatic

    S se determine cte dintre aceste Npuncte se afl n interiorul triunghiului. Unpunct este considerat a fi n interiorul triunghiului i n cazurile n care se afl pe unadintre cele trei laturi sau este unul dintre cele trei vrfuri ale triunghiului.

    Date de intrarePrimele trei linii ale fiierului de intrare TRIUNGHI.INconin cte dou numere n-

    tregi reprezentnd coordonatele vrfurilor triunghiului. Urmtoarea linie conine nu-

    mrul Nal celorlalte puncte. Fiecare dintre urmtoarele N linii va conine cte dounumere ntregi reprezentnd coordonatele unui punct.

    Date de ieireFiierul de ieire TRIUNGHI.OUTtrebuie s conin o singur linie pe care se va aflanumrul punctelor din interiorul triunghiului.

    Restricii i precizri

    1 N100000; coordonatele punctelor sunt numere naturale cuprinse ntre 0 i 255; coordonatele tuturor punctelor sunt date n ordinea: coordonata pe axa Ox, coor-

    donata pe axa Oy.

    ExempleTRIUNGHI.IN TRIUNGHI.OUT

    0 0 2

    10 0

    0 10

    3

    1 1

    5 5

    10 1

    TRIUNGHI.IN TRIUNGHI.OUT

    0 0 01 0

    0 1

    3

    1 1

    2 2

    3 3

    Timp de execuie: 1 secund/test

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    3/57

    OLI Cluj-Napoca 2003 13

    1.1.3. GuriSe consider o matrice ale crei elemente fac parte din mulimea {0, 1}. O regiuneeste o parte a matricei care conine elemente cu aceeai valoare, astfel nct se poateajunge din orice element al regiunii n oricare altul prin deplasri pe orizontal sau

    vertical, trecnd doar prin elemente ale regiunii. O gaur este o regiune de zerouricare nu "atinge" marginile matricei. Va trebui s determinai numrul de elemente pecare le conine cea mai mare gaur (cea care conine un numr maxim de elemente).

    Date de intrarePrima linie a fiierului de intrare GAURI.INconine dou numere ntregiMi Ncarereprezint numrul liniilor, respectiv numrul coloanelor matricei. Fiecare dintre ur-mtoarele Mlinii conin cteNcifre din mulimea {0, 1}. Acestea reprezint valorileelementelor matricei. Valorile de pe o linie nu vor fi separate prin spaii.

    Date de ieireFiierul de ieire GAURI.OUTtrebuie s conin o singur linie pe care se va afla nu-mrul elementelor din cea mai mare gaur.

    Restricii i precizri 1 M,N100; dac nu exist nici o gaur, se consider c cea mai mare gaur are 0 elemente; pot exista mai multe guri care au acelai numr maxim de elemente.

    ExempluGAURI.IN GAURI.OUT

    8 8 4

    00000000

    00100111

    01110101

    01011011

    0100101001101001

    00111111

    00000000

    Timp de execuie: 1 secund/test

    1.1.4. ExponentSe consider dou numere ntregi mi n. S se determine cea mai mare valoare k, ast-fel nct numrul m! s fie multiplu al numrului nk.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    4/57

    14 Problemele Olimpiadelor de Informatic

    Date de intrareFiierul de intrare EXPONENT.INconine o singur linie pe care se afl dou numere

    ntregi, separate printr-un spaiu, reprezentnd valorile mi n.

    Date de ieireFiierul EXPONENT.OUTva conine o singur linie pe care se va afla valoarea k.

    Restricie 2 m, n2000000000 (dou miliarde).

    ExempluEXPONENT.IN EXPONENT.OUT

    20 24 6

    Timp de execuie: 1 secund/test

    1.1.5. SoldaiSe consider n soldai care fac parte dintr-un detaament i n valori care reprezint

    numrul de pachete de hran pe care le poate duce fiecare dintre soldai (prima valoarecorespunde primului soldat, a doua valoare celui de-al doilea soldat etc.). Soldaii tre-buie dispui ntr-un numr nenul bde bastioane, respectnd condiiile: nu pot exista bastioane fr soldai; bastioanele sunt identificate prin numere cuprinse ntre 1 i bi pot fi distruse, dar

    numai unul dup altul, ncepnd cu primul (cu alte cuvinte, un bastion nu poate fidistrus dac nu sunt distruse toate bastioanele din faa lui);

    pentru orice numr dde bastioane (0 db 1) care pot fi distruse, pachetele dehran purtate de soldaii din bastionul d+ 1 trebuie s poat fi mprite exact (frfraciuni de pachet) la toi soldaii rmai n bastioanele identificate prin numerecuprinse ntre d+ 1 i b(cele care nu au fost distruse).

    Date de intrarePrima linie a fiierului de intrare SOLDATI.INva conine numrul nal soldailor. Ceade-a doua linie va conine cele nvalori care reprezint numrul de pachete de hran pecare le poate duce fiecare soldat. Aceste valori vor fi separate prin cte un spaiu.

    Date de ieireFiierul de ieire SOLDATI.OUTva conine un numr de linii egal cu numrul bastioa-nelor. Fiecare linie va conine numrul pachetelor pe care le pot duce soldaii din bas-

    tionul respectiv. Aceste numere vor fi separate prin cte un spaiu.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    5/57

    OLI Cluj-Napoca 2003 15

    Restricii i precizri

    2 n1000; un soldat va duce cel puin unul i cel mult 1000 de pachete; dac exist mai multe soluii, trebuie generat doar una dintre ele; pentru datele de test folosite va exista ntotdeauna cel puin o soluie.

    ExempluSOLDATI.IN SOLDATI.OUT6 2 4

    4 10 3 9 2 3 3 9

    10

    3

    ExplicaieDetaamentul este format din ase soldai. Soldaii de la primul bastion pot duce 6 pa-chete care pot fi mprite la cei ase soldai (cazul n care nu cade nici un bastion).

    Soldaii de la al doilea bastion pot duce 12 pachete care pot fi mprite la cei patrusoldai rmai (cazul n care nu cade primul bastion).

    Soldatul de la al treilea bastion poate duce 10 pachete care pot fi mprite la ceidoi soldai rmai (cazul n care cad primele dou bastioane).

    Soldatul de la ultimul bastion poate duce 3 pachete. Acestea nu mai trebuie mpri-te deoarece a rmas un singur soldat.Dac la ultimul bastion rmas ar fi fost plasaimai muli soldai, atunci numrul total de pachete pe care le duc soldaii de la acestbastion trebuie s poat fi mprit la numrul soldailor de la acest bastion.

    Dispunerea tuturor soldailor ntr-un singur bastion nu este posibil, deoarece nu-mrul total al pachetelor de hran este 31, care nu este multiplu de 6.

    Timp de execuie: 1 secund/test

    1.1.6. GrafSe consider un graf conex cu nvrfuri i mmuchii. Nodurile sunt identificate prinnumere cuprinse ntre 1 i n. S se determine nodul aflat la cea mai mare distan fade nodul identificat prin numrul 1. Distana este dat de lungimea minim a unuidrum de la nodul respectiv la nodul identificat prin numrul 1.

    Date de intrarePrima linie a fiierului de intrare GRAF.INva conine numrul nal nodurilor i num-rul mal muchiilor, separate printr-un spaiu. Fiecare dintre urmtoarele mlinii va de-scrie o muchie a grafului; ea va conine dou numerexi y, separate printr-un spaiu,cu semnificaia: exist o muchie ntre nodul identificat prin numrulxi nodul identi-ficat prin numruly.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    6/57

    16 Problemele Olimpiadelor de Informatic

    Date de ieireFiierul de ieire GRAF.OUTva conine o singur linie pe care se va afla numrul princare este identificat nodul aflat la cea mai mare distan fa de nodul identificat prinnumrul 1.

    Restricii i precizri

    1 n100; nm1000; nu pot exista dou sau mai multe muchii ntre aceleai dou noduri ale grafului; dac exist mai multe noduri aflate la distana maxim, poate fi ales oricare dintre

    ele.

    ExempleGRAF.IN GRAF.OUT

    4 4 2

    1 2

    1 3

    1 4

    2 4

    GRAF.IN GRAF.OUT

    7 8 4

    1 2

    1 3

    2 3

    2 4

    3 4

    1 5

    1 6

    1 7

    Timp de execuie: 1 secund/test

    1.2. Olimpiada Naional de Informatic, 2002

    1.2.1. Reconstrucien urma unor atentate cu bombe, unul dintre pereii unei cldiri n form de pentagonua suferit daune majore. Imaginea codificat a peretelui avariat se reprezint sub formaunei matrice cu mlinii i ncoloane ale crei elemente sunt numere ntregi din muli-mea {0, 1}. Valoarea 1 are semnificaia "zid intact", n timp ce semnificaia valorii 0este "zid avariat".

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    7/57

    ONI, 2002 17

    Sumele alocate de guvern pentru refacerea cldirii vor fi donate celor care i vorajuta pe constructori s refac aceast cldire prin plasarea, pe vertical, a unor blocuride diverse nlimi i lime 1, n zonele care au fost avariate.

    Pentru o structur dat a unui perete din cldire, determinai numrul minim deblocuri necesare pentru refacerea construciei.

    Date de intrare

    Fiierul de intrare RECONSTR.INconine, pe prima linie, dimensiunile mi nale pere-telui cldirii, iar pe urmtoarele mlinii, cte nvalori din mulimea {0, 1}, neseparateprin spaii.

    Date de ieireFiierul de ieireRECONSTR.OUTva conine, pe cte o linie, secvene de forma knr,unde kindic nlimea unui bloc, iar nreste numrul de blocuri de nlime k. Celedou numere vor fi separate prin cte un spaiu, iar liniile vor fi ordonate cresctor, nfuncie de valoarea k.

    Restricii i precizri

    1 m, n200; n fiierul de ieire nu vor aprea linii de forma k0.

    ExempluRECONSTR.IN RECONSTR.OUT

    5 10 1 7

    1110000111 2 1

    1100001111 3 2

    1000000011 5 1

    1111101111

    1110000111

    Timp de execuie: 1 secund/test

    1.2.2. Podntre dou maluri ale unei vi adnci s-a construit un pod suspendat format dinNbu-ci de scndur, legate cu liane. Vom considera c scndurile sunt numerotate de la 1la N, ncepnd de pe malul pe care ne aflm. n timp, unele buci de scndur s-audeteriorat, iar altele chiar au disprut. Pentru traversarea podului se tie c: se pot face pai doar de lungime 1, 2 sau 3; scndurile deteriorate sunt nesigure, deci pe ele i de pe ele se pot face doar pai

    de lungime 1; evident, nu se poate pi pe o scndur care lipsete.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    8/57

    18 Problemele Olimpiadelor de Informatic

    Scriei un program care s determine numrul de modaliti de traversare a podului(mai exact, de a ajunge pe cellalt mal), precum i o soluie de traversare, dac o astfelde soluie exist.

    Date de intrarePrima linie a fiierului de intrare POD.IN conine numrul n al scndurilor. Primulnumr de pe a doua linie este ki indic numrul scndurilor care lipsesc. Aceast li-

    nie mai conine numerele de ordine ale celor k scnduri. Primul numr de pe a treialinie este hi indic numrul scndurilor deteriorate. Linia mai conine numerele deordine ale celor hscnduri. Numerele de pe o linie sunt separate prin spaii.

    Date de ieirePrima linie a fiierului de ieire POD.OUTva conine numrul de posibiliti de a tra-

    versa podul. n cazul n care podul nu poate fi traversat, linia va conine valoarea -1.Dac podul poate fi traversat, pe a doua linie va fi descris o modalitate de traversare.Pe aceast linie se vor afla numerele de ordine ale scndurilor pe care se pete, nordinea n care acestea sunt parcurse.

    Restricii i precizri

    3 n300; 0 k, hn; prima scndur nu poate lipsi; numerele de ordine ale scndurilor deteriorate i numerele de ordine ale scnduri-

    lor care lipsesc formeaz dou mulimi disjuncte; numrul posibilitilor de traversare conine cel mult 80 de cifre.

    ExemplePOD.IN POD.OUT

    5 24

    0 3

    0

    POD.IN POD.OUT

    10 48

    2 2 7 3 6 8

    1 5

    POD.IN POD.OUT

    6 -1

    2 2 4

    1 3

    Timp de execuie: 1 secund/test

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    9/57

    ONI, 2002 19

    1.2.3. SumaConsiderm irul format din primeleNnumere naturale: ai= ipentru i= 1, ...,N. Fie-crui element al acestui ir i se asociaz un semn (+ sau ).

    Pentru o valoare Sdat se cere s se determine cel mai mic numrNastfel nct,dup asocierea semnelor, elementele obinute s aib suma S.

    Date de intrare

    Fiierul SUMA.INva conine un singur numr ntreg care reprezint suma care trebuieobinut dup asocierea semnelor.

    Date de ieireFiierul de ieire SUMA.OUTva conine, pe prima linie, numrulNal elementelor iru-lui. Pe urmtoarele linii se vor afla indicii elementelor care au semn negativ, cte unulpe o linie.

    Restricie

    0 < S100000.

    ExempleSUMA.IN SUMA.OUT12 7

    1

    7

    Timp de execuie: 1 secund/test

    1.2.4. BecuriUn panou publicitar, de form dreptunghiular conine becuri, unul lng altul, aliniatepe linii i coloane. Fiecare linie i fiecare coloan are un comutator care schimb sta-rea tuturor becurilor de pe acea linie sau coloan, din starea n care se afl n starea

    opus. Iniial panoul are toate becurile stinse. S se realizeze un program care, acio-nnd asupra unui numr minim de linii i coloane, aduce panoul din starea iniial, la oconfiguraie dat, dac acest lucru este posibil.

    Date de intrarePe prima linie a fiierului de intrare BECURI.INse afl dou numere naturale, mi n,separate printr-un spaiu, reprezentnd numrul de linii, respectiv coloane, ale panou-lui. Pe urmtoarele mlinii se afl cte nnumere, separate prin cte un spaiu, reprezen-

    tnd configuraia final a panoului. Un bec aprins este codificat prin 1, n timp ce unbec stins este codificat prin 0.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    10/57

    20 Problemele Olimpiadelor de Informatic

    Date de ieirePe prima linie a fiierului de ieire BECURI.OUTse vor afla indicii coloanelor asupracrora s-a acionat. Cea de-a doua linie va conine indicii liniilor asupra crora s-a ac-ionat. Numerele de pe o linie vor fi separate prin cte un spaiu. Dac nu se acionea-z asupra nici unei linii sau asupra nici unei coloane, pe linia corespunztoare va fiscris doar valoarea 0. Numerotarea liniilor i a coloanelor ncepe de la 1. n cazul ncare nu exist nici o soluie, fiierul de ieire va conine o singur linie pe care se va

    afla valoarea -1.

    Restricie

    1 m, n100.

    ExempleBECURI.IN BECURI.OUT

    5 6 2 5

    1 0 1 1 0 1 1 2 3

    1 0 1 1 0 1

    1 0 1 1 0 1

    0 1 0 0 1 0

    0 1 0 0 1 0

    Timp de execuie: 1 secund/test

    1.2.5. DiscuriSe dau Nnumere reale care reprezint razele a N discuri. Considerm c aezm undisc n sistemul xOydac l plasm la o coordonatxpozitiv suficient de mare, tan-gent cu axa Oxi deasupra ei, apoi l mpingem spre Oypn cnd devine tangent cuOysau cu primul disc ntlnit, aezat anterior. n figura rezultat, dup aezarea tuturordiscurilor n ordinea dat, unele dintre ele pot fi considerate dispensabile deoarece,prin eliminarea lor, nu se modific limea total a figurii rezultate, adic nici un discnu se mai poate deplasa spre stnga. Sarcina voastr este de a scrie un program careidentific toate discurile dispensabile dintr-o configuraie dat.

    Date de intrareFiierul de intrare DISCURI.INconine pe prima linie numrulNal discurilor, iar peurmtoareleNlinii cte un numr real care indic raza unui disc. Razele apar n ordi-nea amplasrii discurilor.

    Date de ieirePrima linie a fiierului DISCURI.OUTva conine numrulKal discurilor dispensabile.Pe urmtoareleKlinii se vor afla numerele de ordine ale discurilor dispensabile.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    11/57

    ONI, 2002 21

    Restricie

    1 N1000.

    ExempluDISCURI.IN DISCURI.OUT

    7 3

    4 2

    0.1 30.5 5

    3

    0.5

    4

    1

    cercurile haurate sunt dispensabile

    Timp de execuie: 1 secund/test

    1.2.6. CodTransmiterea i memorarea informaiilor necesit diverse sisteme de codificare n ve-derea utilizrii optime a spaiilor disponibile. Un sistem foarte des ntlnit este acela

    prin care unei secvene de caractere i se asociaz un numr.Se consider cuvintele formate numai cu literele mici ale alfabetului englez. Dintretoate aceste cuvinte le considerm doar pe cele ale cror caractere sunt n ordine strictlexicografic (caracterul de pe orice poziie este strict mai mic dect un eventual suc-cesor). Sistemul de codificare se obine astfel: se ordoneaz cuvintele n ordinea cresctoare a lungimilor lor; cuvintele de aceeai lungime se ordoneaz lexicografic; cuvinte sunt codificate prin numerotarea lor (n irul obinut dup ordonare):

    1. - a

    2. - b

    ...

    26. - z

    27. - ab

    ...

    51. - az

    52. - bc

    ...

    83681. - vwxyz

    ...

    Dndu-se un cuvnt, s se precizeze dac poate fi codificat conform sistemului de-scris. n caz afirmativ, s se precizeze codul su.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    12/57

    22 Problemele Olimpiadelor de Informatic

    Date de intrareFiierul de intrare COD.INconine o singur linie pe care se afl un cuvnt.

    Date de ieiren cazul n care cuvntul poate fi codificat, fiierul de ieire COD.OUT va conine osingur linie pe care se va afla codul acestuia. n caz contrar, fiierul va conine doar

    valoarea 0.

    Restricie

    un cuvnt conine cel mult zece litere.

    ExempluCOD.IN COD.OUT

    bf 55

    COD.IN COD.OUT

    aab 0

    COD.IN COD.OUT

    vwxyz 83681

    Timp de execuie: 1 secund/test

    1.2.7. HotelDepartamentul administrativ al unui hotel are nangajai. Patronul hotelului hotrtes schimbe costumele personalului din acest departament, astfel nct angajaii carelucreaz la etaje diferite s fie mbrcai n haine colorate diferit, iar cei care lucreazla acelai etaj s fie mbrcai n haine colorate la fel. Angajaii sunt identificai printr-un cod unic, care const ntr-un numr natural format din cel mult patru cifre.

    S se determine numrul modalitilor de alegere a costumelor, astfel nct s fierespectate condiiile descrise anterior. De asemenea, trebuie determinat i una dintreaceste modaliti.

    Date de intrarePrima linie a fiierului de intrare HOTEL.INconine numrul nal angajailor i num-rul kal culorilor disponibile. Cele dou numere sunt separate printr-un spaiu. Pe ur-mtoarele n linii se afl cte dou numere naturale, separate printr-un spaiu, primulreprezentnd codul, iar al doilea etajul asociat unui angajat.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    13/57

    ONI, 2002 23

    Date de ieirePrima linie a fiierului de ieire HOTEL.OUTva conine numrul modalitilor de ale-gere a costumelor. tiind c fiecare culoare este codificat printr-un numr naturalnenul mai mic sau egal cu ki c numerele asociate culorilor sunt distincte, n fiier se

    va scrie pe cte o linie (ncepnd cu a doua) codul unei persoane i culoarea costumu-lui, valori separate prin cte un spaiu. Ordinea apariiei n fiierul de ieire va fi ace-eai cu cea din fiierul de intrare. Dac nu exist nici o soluie, n fiier se va scrie o

    singur linie care va conine valoarea 0.

    Restricii i precizri

    1 n1000; 1 k200; hotelul are cel mult 200 de etaje.

    ExempleHOTEL.IN HOTEL.OUT

    4 5 60

    123 2 123 1

    35 1 35 2

    430 2 430 1

    13 0 13 3

    HOTEL.IN HOTEL.OUT

    5 2 0

    12 1

    13 0

    14 1

    10 2

    11 0

    Timp de execuie: 1 secund/test

    1.2.8. LacO zon mltinoas are forma dreptunghiular, avnd nl linii i nccoloane. Ea esteformat din celule cu latura de o unitate. O parte din acestea reprezint uscat, iar altelereprezint ap, uscatul fiind codificat cu 0, iar apa cu 1. Se dorete s se obin undrum de pe malul de nord spre cel de sud, trecnd doar pe uscat. Celulele cu ap pot fi

    transformate n uscat, parautnd ntr-un loc cu ap cte un ponton (o plut) de dimen-siunea unei celule. Deoarece parautarea este periculoas, se dorete minimizarea nu-mrului de parautri. Pentru deplasare, dintr-o celul se poate trece ntr-o celul veci-n pe linie, coloan sau diagonal.

    Determinai numrul minim de pontoane i coordonatele acestora.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    14/57

    24 Problemele Olimpiadelor de Informatic

    Date de intrareFiierul de intrare LAC.INconine, pe prima linie, numerele naturale nli nc, separateprintr-un singur spaiu. Pe urmtoarele nl linii se afl cte nc valori binare, separateprin cte un spaiu, reprezentnd configuraia zonei (0 pentru uscat i 1 pentru ap).

    Date de ieirePrima linie a fiierului de ieire LAC.OUTva conine numrul minim kal pontoanelor

    necesare. Pe urmtoarele k linii se vor afla cte dou numere naturale, separate princte un spaiu, reprezentnd linia, respectiv coloana, n care a fost amplasat unul dintrepontoane.

    Restricie

    1 nl, nc 100.

    ExempluLAC.IN LAC.OUT

    8 9 2

    0 1 1 1 1 1 1 1 1 4 5

    0 1 1 1 1 1 1 1 1 7 8

    1 0 1 1 1 0 1 1 11 1 0 0 1 1 0 1 1

    1 1 1 1 1 1 1 0 1

    1 1 1 1 1 1 1 1 0

    1 1 1 1 1 1 1 1 1

    1 1 1 1 1 1 0 1 1

    Timp de execuie: 1 secund/test

    1.2.9. Logicntr-o zi a venit la mine un coleg i mi-apropus un joc de logic. Mi-a artat urm-

    toarea figur:Pe aceast figur au fost numerotate

    segmentele, pentru a fi mai clar noiuneade segment. Avnd la dispoziie un creioncare se afl pe hrtie n zona exterioar,

    trebuie s se traseze curbe pe foaie, fr sse ridice creionul, astfel nct linia s trea-c prin toate segmentele (fr a atinge ex-

    tremitile) exact o dat.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    15/57

    ONI, 2002 25

    La sfrit trebuie s se ajung tot n exterior. Liniile (curbele) se pot intersecta. Amnceput i am ncercat de mai multe ori, dar n-am reuit.

    Acum, cnd am mai crescut, am reuits demonstrez c nu se poate, dar am ob-servat c pentru alte figuri este posibil.Un exemplu n care problema are soluieeste:

    Eu mi-am dat seama de ce uneori se poate i alteori nu, dar vreau s vd dac reu-ii i voi. De aceea v voi da cteva figuri i, pentru fiecare, trebuie s rspundei cuDAsau NUla ntrebarea: se poate sau nu trasa o curb avnd tipul descris mai sus?

    Date de intrareFiierul de intrare LOGIC.INare urmtoarea structur: pe prima linie se afl numrul Tal figurilor; pe urmtoarele Tgrupuri de linii se afl datele corespunztoare celor Tfiguri, du-

    p cum urmeaz:

    pe prima linie a grupului se afl valoareaNcare reprezint numrul de linii ide coloane ale matricei ptratice care descrie figura; pe urmtoareleNlinii se afl cteNnumere, separate printr-un spaiu (numere

    ntregi cuprinse ntre 0 i 255), care reprezint elementele matricei.

    Aceast matrice codific figura astfel: definim o zon ca fiind o parte continu amatricei care conine acelai numr i este aria maxim cu aceast proprietate; altfelspus, dou csue alturate (care difer la o singur coordonat printr-o unitate) careconin acelai numr, se lipesc. Cu alte cuvinte, n interiorul zonei nu vor exista seg-mente. La aceste zone se mai adaug i exteriorul matricei ca fiind o nou zon. nmatrice pot fi zone crora le corespunde acelai numr, dar care "nu se ating" i seconsider a fi zone diferite. Segmentele sunt segmente de dreapt care separ dou

    zone i au lungimea maxim.De exemplu, figura definit prin:3

    1 1 2

    1 2 2

    1 1 2

    este urmtoarea:Se observ c ntre zonele 1 i 2 exist cinci segmente, ntre zona 1 i exterior exis-

    t trei segmente, iar ntre zona 2 i exterior exist tot trei segmente. Trebuie remarcatfaptul c segmentul numerotat n figura anterioar cu 10 este compus din trei segmen-

    te mici, dar este considerat a fi un singur segment, conform definiiei.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    16/57

    26 Problemele Olimpiadelor de Informatic

    Date de ieiren fiierul LOGIC.OUTse vor scrie T linii, corespunztoare celor T figuri. Pe fiecarelinie va fi scris unul dintre mesajele DAsau NU, n funcie de rspunsul la ntrebare.

    Restricii

    1 T 10; 1 N 100.

    ExempluLOGIC.IN LOGIC.OUT

    2 DA

    2 NU

    1 2

    3 4

    4

    1 1 2 2

    1 1 2 2

    3 4 4 1

    3 4 4 1

    Timp de execuie: 1 secund/test

    1.2.10. FotoGigel, specialist n editare grafic pe calculator, se confrunt cu o problem. El trebuies aranjeze patru fotografii, disponibile n format electronic, ntr-o pagin de prezenta-re, astfel nct suprafaa paginii s fie complet "acoperit" de cele patru fotografii ifr ca acestea s se suprapun n vreun fel. Gigel poate modifica dimensiunile iniialeale fotografiilor, ns fr a deforma imaginile. Pentru aceasta el trebuie s pstrezeneschimbat raportul dintre lungimea i nlimea fotografiilor. Nu conteaz ordineaaezrii fotografiilor, ele putnd fi translatate oriunde n cadrul paginii, ns operaiilede rotaie nu sunt permise.

    Determinai pentru fiecare fotografie dimensiunile finale, cunoscndu-se dimensiu-nile paginii, precum i dimensiunile iniiale ale fotografiilor.

    Date de intrarePrima linie a fiierului de intrare FOTO.INconine dou numere naturale li h, separa-

    te printr-un spaiu, reprezentnd lungimea, respectiv nlimea paginii. Pe urmtoarelepatru linii se afl cte dou numere naturale, separate printr-un spaiu, reprezentndlungimea, respectiv nlimea, uneia dintre cele patru fotografii care trebuie aranjate.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    17/57

    ONI, 2002 27

    Date de ieireFiierul de ieire FOTO.OUTva conine patru linii pe care se vor afla cte dou numerenaturale care reprezint dimensiunile (lime i nlime) finale ale celor patru fotogra-fii. Prima linie va corespunde primei fotografii din fiierul de intrare, a doua linie celeide-a doua fotografii etc.

    Restricii i precizri

    dimensiunile paginii i ale fotografiilor sunt numere naturale cuprinse ntre 1 i2000;

    dac exist mai multe soluii va fi determinat doar una dintre ele; exist ntotdeauna cel puin o posibilitate de amplasare a fotografiilor.

    ExempluFOTO.IN FOTO.OUT

    140 140 20 10

    24 12 40 130

    4 13 100 140

    10 14 20 10

    4 2

    Timp de execuie: 1 secund/test

    1.2.11. BalanGigel are o "balan" mai ciudat pe care vrea s o echilibreze. De fapt, aparatul estediferit de orice balan pe care ai vzut-o pn acum. Balana lui Gigel dispune dedou brae de greutate neglijabil, fiecare avnd lungimea 15. Din loc n loc, pe acestebrae se afl crlige, de care Gigel poate atrna greuti distincte din colecia sa de Ggreuti (numere naturale cuprinse ntre 1 i 25). Gigel poate atrna oricte greuti deorice crlig, dar trebuie s foloseasc toate greutile de care dispune.

    Gigel a reuit s echilibreze balana relativ repede, dar acum dorete s tie n cte

    moduri poate fi ea echilibrat.Cunoscnd amplasamentul crligelor i greutile pe care Gigel le are la dispoziie,scriei un program care calculeaz n cte moduri se poate echilibra balana.

    Date de intrareFiierul de intrare BALANTA.INare urmtoarea structur: pe prima linie se afl numrul Cal crligelor i numrul Gal greutilor; cele dou

    numere sunt separate printr-un spaiu; pe a doua linie se afl C numere ntregi distincte, separate prin spaiu, cu valori

    cuprinse ntre -15 i 15 inclusiv, reprezentnd amplasamentele crligelor fa de

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    18/57

    28 Problemele Olimpiadelor de Informatic

    centrul balanei; valoarea absolut a numerelor reprezint distana fa de centrulbalanei, iar semnul indic braul balanei pe care se afl crligul, '-' pentru braulstng i '+' pentru braul drept;

    pe a treia linie se afl Gnumere naturale distincte, cuprinse ntre 1 i 25, reprezen-tnd valorile greutilor pe care Gigel le va folosi pentru a echilibra balana.

    Date de ieire

    Fiierul de ieire BALANTA.OUTconine o singur linie, pe care se afl un numr natu-ralM, numrul de variante de plasare a greutilor care duc la echilibrarea balanei.

    Restricii i precizri

    2 C, G20; exist ntotdeauna cel puin o variant i cel mult 100.000.000; balana se echilibreaz dac suma produselor dintre greuti i coordonatele unde

    ele sunt plasate este 0 (suma momentelor greutilor fa de centrul balanei este 0).

    ExempluBALANTA.IN BALANTA.OUT

    2 4 2-2 3

    3 4 5 8

    Timp de execuie: 1 secund/test

    1.2.12. Alinieren armat, o companie este alctuit din nsoldai. La inspecia de diminea soldaiistau aliniai n linie dreapt n faa cpitanului. Acesta nu e mulumit de ceea ce vede;e drept c soldaii sunt aezai n ordinea numerelor de cod din registru, dar nu n ordi-nea nlimii. Cpitanul cere ctorva soldai s ias din rnd, astfel ca cei rmai, fra-i schimba locurile, doar apropiindu-se unul de altul (pentru a nu rmne spaii mari

    ntre ei) s formeze un ir n care fiecare soldat vede privind de-a lungul irului, celpuin una din extremiti (stnga sau dreapta). Un soldat vede o extremitate dac ntreel i captul respectiv nu exist un alt soldat cu nlimea mai mare sau egal cu a lui.

    Scriei un program care determin, cunoscnd nlimea fiecrui soldat, numrulminim de soldai care trebuie s prseasc formaia, astfel ca irul rmas s respectecondiia impus de cpitan.

    Date de intrarePe prima linie a fiierului de intrareALINIERE.INse afl numrul nal soldailor dinir, iar pe linia urmtoare se afl un ir de nnumere reale, cu maximum cinci zecimale

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    19/57

    ONI, 2002 29

    fiecare, separate prin spaii. Al k-lea numr de pe aceast linie reprezint nlimeasoldatului avnd codul k.

    Date de ieireFiierulALINIERE.OUTva conine pe prima linie numrul soldailor care trebuie sprseasc formaia, iar pe linia urmtoare, codurile acestora n ordine cresctoare,separate dou cte dou printr-un spaiu.

    Restricii i precizri

    nlimile soldailor sunt numere reale cuprinse ntre 0,5 i 2,5; 2 n1000; dac exist mai multe soluii posibile, se va alege doar una dintre ele.

    ExempluALINIERE.IN ALINIERE.OUT

    8 4

    1.86 1.86 1.30621 2 1.4 1 1.97 2.2 1 3 7 8

    Timp de execuie: 1 secund/test

    1.2.13. ArboreSe consider un arbore cuNvrfuri, numerotate de la 1 laN. Scriei un program careadaug arborelui dat un numr minim de muchii, astfel nct fiecare vrf al grafuluiobinut s aparin exact unui singur ciclu.

    Date de intrarePrima linie a fiierului de intrareARBORE.INconine numrulNal vrfurilor arbore-lui. Pe urmtoareleN 1 linii se afl cte dou numere, separate printr-un spaiu, carereprezint extremitile uneia dintre muchiile arborelui.

    Date de ieirePrima linie a fiierului de ieireARBORE.OUTconine numrulNral muchiilor adu-gate. Pe urmtoareleNr 1 linii se afl cte dou numere, separate printr-un spaiu,care reprezint extremitile uneia dintre muchiile adugate. n cazul n care problemanu are soluie, fiierul de ieire va conine o singur linie pe care se va afla valoarea -1.

    Restricie

    3 N1000.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    20/57

    30 Problemele Olimpiadelor de Informatic

    ExempleARBORE.IN ARBORE.OUT

    4 -1

    1 2

    2 3

    2 4

    ARBORE.IN ARBORE.OUT

    7 21 2 6 7

    1 3 2 4

    3 5

    3 4

    5 6

    5 7

    Timp de execuie: 1 secund/test

    1.2.14. DecodificareServiciul Romn de Informaiia dat de urma unei organizaii teroriste care i are sedi-

    ul pe teritoriul rii noastre. Folosind cei mai pricepui i mai bine antrenai spioni iofieri, SRI a reuit s identifice computerul principal al organizaiei teroriste. Dac vareui s acceseze informaiile din acest computer, SRI i va putea aresta pe toi mem-brii organizaiei i va asigura meninerea pcii mondiale. Singura problem este spar-gerea codului de acces. Tot ceea ce se tie despre acest cod este c el este reprezentatde ctre o permutare de lungime N. Specialitii SRI au ncercat diverse metode de adescoperi codul, ns tot ceea ce au reuit s obin este un program care, transmin-du-i-se ca parametru o permutare de lungimeN, specific n cte poziii codul de accescoincide cu aceasta.

    Scriei un program care, folosind programul-ajuttor (reprezentat sub forma unuimodul), determin codul de acces n computerul teroritilor.

    Date de intrareProgramul nu va citi date din nici un fiier de intrare. El va apela nti funcia GetNamodulului PROG, care va returna valoareaN numrul de elemente ale permutrii care

    trebuie descoperit.Apoi va apela numai funcia Check, creia i va fi transmis ca parametru, de fie-

    care dat, o permutare de lungimeN. Aceast funcie va returna numrul de poziii ncare permutarea coincide cu permutarea care trebuie descoperit. Programul dumnea-

    voastr trebuie ca, dup un numr finit de apelri ale funciei Check, s descoperepermutarea cutat.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    21/57

    ONI, 2002 31

    Date de ieireProgramul va trebui s tipreasc n fiierul DECOD.OUTo permutare de lungime N.Toate celeNelemente vor fi tiprite pe prima linie a fiierului, fiind separate de cteun spaiu.

    Restricie

    5 N256.

    Instruciuni pentru programatorii n C/C++Programatorii n C/C++ au la dispoziie header-ul PROG.H. n acest fiier sunt decla-rate urmtoarele funcii:

    intGetN(void)

    intCheck(intp[256])

    Funcia Checkare ca parametru un vector cu elemente ntregi. Ea va returna unadintre urmtoarele valori: valoarea -1 dac primele Nelemente (ncepnd cu poziia 0) ale vectorului trans-

    mis ca parametru nu constituie o permutare de lungime N; n cazul n care permutarea este corect, se returneaz un numr cuprins ntre 0 i

    Ncare reprezint numrul de poziii n care permutarea de lungimeNtransmis caparametru coincide cu permutarea care trebuie descoperit.

    Instruciuni pentru programatorii n PascalModulul extern este implementat sub forma unit-ului PROG. n acest unitsunt declara-

    te urmtoarele tipuri i funcii care vor fi folosite n program:typeperm = array[1..256] ofInteger;

    functionGetN:Integer;

    functionCheck(varpermut:perm):Integer;

    Funcia Checkare ca parametru un vector de tipul perm. Ea va returna una dintreurmtoarele valori: valoarea -1 dac primele Nelemente (ncepnd cu poziia 0) ale vectorului trans-

    mis ca parametru nu constituie o permutare de lungime N; n cazul n care permutarea este corect, se returneaz un numr cuprins ntre 0 i

    Ncare reprezint numrul de poziii n care permutarea de lungimeNtransmis caparametru coincide cu permutarea care trebuie descoperit.

    ExempluS presupunem c permutarea cutat este 2 1 3 4 5. La nceput va fi apelat funciaGetN; aceasta va returna valoarea 5. Vor urma apeluri succesive ale funciei Check,pn n momentul n care aceasta returneaz valoarea 5. O posibil succesiune este:

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    22/57

    32 Problemele Olimpiadelor de Informatic

    apel pentru permutarea 1 2 3 4 5 - se returneaz 3; apel pentru permutarea 3 2 1 4 5 - se returneaz 2; apel pentru permutarea 2 1 3 4 5 - se returneaz 5.

    Permutarea corect este scris n fiierul DECOD.OUT.

    Timp de execuie: 1 secund/test

    1.2.15. SetiSe pare c, n sfrit, cuttorii vieii extraterestre au descoperit ceva! n cursul proiec-

    tului SETI@home a fost izolat o secven care ar putea reprezenta un semnal de laalte forme de via inteligent. Ca urmare, proiectul SETI@ONIi propune s verificedac acel semnal provine ntr-adevr de la extrateretri sau doar de la nite puti carebeauFanta.

    Pentru comoditate, poriunea de semnal care trebuie analizat vi se pune la dispozi-ie sub forma unei succesiuni de litere ale alfabetului latin. De asemenea, avei la dis-poziie i un dicionar de cuvinte extraterestre, codificate n acelai mod. Trebuie snumrai de cte ori apare fiecare dintre aceste cuvinte n posibilul mesaj extraterestru.

    Pornind de la aceste date, lingvitii pot s nceap lucrul la traducerea mesajului.

    Date de intrarePe prima linie a fiierului de intrare SETI.INse afl numrulNal liniilor mesajului.Urmeaz N linii, fiecare coninnd exact 64 de litere ale alfabetului latin, urmate demarcajul de sfrit de linie. Prin alipirea acestor linii se obine mesajul de analizat,format din 64 Nlitere.

    Pe prima linie a celui de-al doilea fiier de intrare DIC.INeste scris numrulMalcuvintelor din dicionar. Urmeaz Mlinii, fiecare coninnd un cuvnt din dicionar,reprezentat ca o secven de cel puin una i cel mult 16 litere. Cuvintele nu sunt ne-aprat distincte.

    Date de ieireFiierul de ieire SETI.OUTva conine exactMlinii. Pe linia cu numrul iva fi scrisnumrul de apariii ale celui de-al i-lea cuvnt din dicionar. Orice apariie a unui cu-

    vnt trebuie numrat, chiar dac se suprapune peste alte apariii. Se va face distincientre literele mari i literele mici.

    Restricii i precizri

    0 N< 2048; 5 M32000; un cuvnt poate avea cel mult 65535 de apariii.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    23/57

    ONI, 2002 33

    ExempluSETI.IN

    2

    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaba

    babaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBaB

    DIC.IN

    3

    bbab

    b

    SETI.OUT

    3

    2

    3

    Timp de execuie: 1 secund/test

    1.2.16. Suma divizorilor

    Se consider dou numere naturaleAiB. Fie Ssuma tuturor divizorilor naturali ai luiAB. S se determine restul mpririi lui Sla 9901.

    Date de intrarePe prima linie a fiierului de intrare SUMDIV.INse afl numereleAiB, separate princel puin un spaiu.

    Date de ieireFiierul de ieire SUMDIV.OUTva conine o singur linie pe care se va afla restul m-pririi numrului Sla 9901.

    Restricie

    0 A, B50000000.

    ExempluSUMDIV.IN SUMDIV.OUT

    2 3 15

    Timp de execuie: 0,5 secunde/test

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    24/57

    34 Problemele Olimpiadelor de Informatic

    1.2.17. Sistemntr-un jude exist Norae, numerotate de la 1 la N. Fiecare dintre cele Norae ale

    judeului este legat de exact alte dou orae, prin strzi bidirecionale. i mai ciudateste faptul c, n cadrul acestui sistem stradal, nu este ntotdeauna posibil s ajungi dinorice ora n oricare alt ora mergnd pe strzi. Oricum, locuitorii judeului suntmndri de acest sistem al lor i sunt de prere c nu mai exist altul la fel. Trebuie sle demonstrai contrariul i pentru aceasta trebuie s calculai cte sisteme stradale dis-

    tincte cu proprietatea de mai sus exist. Dou sisteme sunt considerate distincte dacexist cel puin o strad ntre o pereche de orae ii j n cadrul primului sistem, carenu exist n cadrul celui de-al doilea.

    Date de intrareDin fiierul SISTEM.INvei citi valoareaN, care reprezint numrul de orae ale ju-deului.

    Date de ieiren fiierul SISTEM.OUTse va scrie numrul de sisteme stradale distincte, cu proprieta-

    tea c orice ora este legat prin strzi directe de exact alte dou orae.

    Restricie

    3 N100.

    ExempleSISTEM.IN SISTEM.OUT

    4 3

    SISTEM.IN SISTEM.OUT

    6 70

    Timp de execuie: 1 secund/test

    1.2.18. ComitatToate seminiile convieuitoare pe Terraau hotrt ca hobbiii, pstrtoriiInelului Pu-terii, s fie izolai ntr-o zon a pmntului numit Comitat. Hotarele Comitatuluitre-buie s fie reprezentate de un poligon convex cu cte un turn de paz n fiecare vrf.

    Se cunosc poziiile tuturor turnurilor din regiune (dou numere naturale raportate laun sistem de axe rectangulare). Un paznic pe cal alb vegheaz hotarele Comitatuluiparcugnd, pe rnd, toate distanele dintre dou turnuri succesive, mergnd pe drumminim, numai pe crri paralele cu axele.

    Se cunoate lungimea maxim a drumului pe care-l poate parcurge paznicul la untur complet al hotarelor Comitatuluii se cere s se determine un poligon cu un numr

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    25/57

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    26/57

    36 Problemele Olimpiadelor de Informatic

    Restricii i precizri

    0 < n50; 0

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    27/57

    OLI Cluj-Napoca 2003 37

    Pentru prima parte a irului, la fiecare pas ise vor genera numere cuprinse ntre 2 ii 3 2i-1 1. Pentru a doua parte a irului, la fiecare pas i se vor genera numere cu-prinse ntre 3 2i-1i 2i+1 1.

    Diferena principal a celor dou rutine recursive este poziia apelului recursiv fade generarea elementelor. Pentru prima parte a irului, apelul va aprea dup generare,iar pentru a doua parte a irului, apelul va aprea naintea generrii.

    Analiza complexitiiDatele de intrare constau ntr-un singur numr, deci ordinul de complexitate al opera-iei de citire este O(1).

    ntotdeauna vor fi generate 2Nnumere, deci ordinul de complexitate al operaiei degenerare a acestora este O(2N).

    Scrierea datelor n fiierul de ieire este realizat pe parcursul determinrii acesto-ra, deci operaia de scriere nu consum timp suplimentar.

    n concluzie, ordinul de complexitate al algoritmului de rezolvare a acestei proble-me este O(1) + O(2N) = O(2N).

    1.3.2. Triunghi

    Pentru fiecare punct dat va trebui s verificm dac se afl sau nu n interiorul triun-ghiului considerat i s numrm punctele din interiorul triunghiului.O variant mai simpl de rezolvare se bazeaz pe faptul c dac un punct se afl n

    interiorul triunghiului, pe una din laturi sau este un vrf, atunci suma ariilor celor treitriunghiuri determinate de punctul respectiv i perechi de vrfuri ale triunghiului dateste egal cu aria triunghiului dat (vezi figura urmtoare).

    Aadar, pentru fiecare punct n parte vom determina ariile triunghiurilor determina-te de punctul respectiv i dou vrfuri ale triunghiului. Dac suma celor trei arii esteegal cu aria triunghiului, atunci punctul se afl n interiorul triunghiului.

    Se observ c dac punctul este un vrf al triunghiului, dou dintre cele trei arii vorfi egale cu 0, iar cea de-a treia arie va fi chiar aria triunghiului dat.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    28/57

    38 Soluiile problemelor propuse la Olimpiadele de Informatic

    n cazul n care vrful se afl pe una dintre laturi (dar nu este un vrf al triunghiu-lui), atunci una dintre arii va fi egal cu 0.

    Dac se cunosc coordonatele vrfurilor unui triunghi, atunci formula de calcul aariei acestuia este:

    1

    1

    1

    2

    1

    33

    22

    11

    yx

    yx

    yx

    .

    n final vom scrie n fiierul de ieire numrul punctelor aflate n interiorul triun-ghiului.

    Analiza complexitiiCitirea coordonatelor vrfurilor triunghiului const n citirea a ase numere ntregi,deci se realizeaz n timp constant.

    Verificarea faptului dac un punct se afl sau nu n interiorul triunghiului conside-rat se realizeaz cu ajutorul unui numr constant de operaii aritmetice. Aceast opera-ie poate fi realizat pe msura citirii coordonatelor punctelor. Aadar, ordinul decomplexitate al operaiilor de citire a datelor i determinare a soluiei este O(N).

    Datele de ieire constau ntr-un singur numr, aadar ordinul de complexitate aloperaiei de scriere a acestora este O(1).

    n concluzie, algoritmul de rezolvare a acestei probleme are ordinul de complexita-te O(1) + O(N) + O(1) = O(N).

    1.3.3. GuriVom determina toate regiunile formate din zerouri i vom eticheta elementele acestorregiuni folosind numere naturale, ncepnd cu 1.

    Pentru fiecare regiune determinat vom pstra dimensiunile acestora (numrul deelemente) ntr-un vector ai crui indici sunt numerele folosite pentru etichetarea di-mensiunilor regiunilor. Pentru a determina aceste regiuni vom folosi un simplu algo-ritm de umplere.

    O gaur poate fi privit ca fiind o regiune format din zerouri care nu conine niciun element aflat pe marginea matricei. Vom parcurge cele patru margini ale matricei i

    vom seta la 0 dimensiunile tuturor regiunilor care conin elemente de pe aceste mar-gini. Astfel, practic am eliminat toate regiunile care nu sunt guri.

    n final vom parcurge vectorul dimensiunilor i vom determina elementul care arevaloarea maxim. Valoarea acestui element va fi scris n fiierul de ieire.

    Analiza complexitiiDatele de intrare constau n dimensiunile matricei i valorile tuturor elementelor aces-

    teia. Aadar ordinul de complexitate al operaiei de citire este O(MN).

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    29/57

    OLI Cluj-Napoca 2003 39

    Operaia de determinare a regiunilor formate din zerouri folosind un algoritm deumplere are ordinul de complexitate O(MN).

    Pentru a elimina regiunile care nu sunt guri vom parcurge cele patru margini alematricei, aadar aceast operaie are ordinul de complexitate O(M) + O(N) + O(M) +O(N) = O(M+N).

    n total pot exista cel mult [MN/ 2] + 1 regiuni (dac matricea are aspectul uneitable de ah). Aadar, operaia de determinare a dimensiunii celei mai mari regiuni are

    ordinul de complexitate O(MN).Datele de ieire constau ntr-un singur numr, operaia de scriere a acestuia avndordinul de complexitate O(1).

    n concluzie, algoritmul de rezolvare a acestei probleme are ordinul de complexita-te O(MN) + O(MN) + O(M+N) + O(MN) + O(1) = O(MN).

    1.3.4. ExponentPentru a determina valoarea k, va trebui, mai nti s descompunem numrul nn fac-

    tori primi. Pentru fiecare factorpcare apare n descompunerea lui n, va trebui s de-terminm puterea la care apare acest factor n descompunerea n factori primi a valoriim!. Vom considera c papare n descompunerea n factori primi a numrului nde u

    ori; cu alte cuvinte, npoate fi scris sub forma n=pu

    q, unde qeste un numr ntreg.Vom determina acum puterea v la care apare p n descompunerea n factori primi anumrului m!. Valoarea vpoate fi obinut astfel: pentru fiecare multiplu al luipmai mic sau egal cu m, numrulpapare o dat n

    descompunerea lui m!; pentru fiecare multiplu al lui p2mai mic sau egal cu m, numrul p apare nc o

    dat n descompunerea lui m!; n general, pentru fiecare multiplu al luipimai mic sau egal cu m, numrulpapare

    nc o dat n descompunerea lui m!.

    Expresia pentru fiecare multiplu al luip2mai mic sau egal cu meste echivalent cuexpresia pentru fiecare multiplu al luipmai mic sau egal cu [m/p].

    n general, expresia pentru fiecare multiplu al lui pi mai mic sau egal cu m esteechivalent cu expresia pentru fiecare multiplu al luipmai mic sau egal cu [m/pi-1].

    Ca urmare, valoarea vla care aparepn descompunerea n factori primi a numru-lui m! poate fi determinat folosind urmtorul algoritm:...v 0

    ct timpm > 0 execut

    v v + [m / p]

    m [m / p]

    sfrit ct timp...

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    30/57

    40 Soluiile problemelor propuse la Olimpiadele de Informatic

    n aceste condiii, pentru ca nk=puk qks fie divizor al numrului m!, trebuie savem k[v/ u].

    Vom determina valorile maxime ale numrului kpentru toi divizorii pi o vomalege pe cea mai mic dintre acestea.

    Analiza complexitiiIntrarea const n citirea a dou numere, aadar ordinul de complexitate al operaiei de

    citire a datelor este O(1).Operaia de descompunere n factori primi a unui numr natural nare ordinul decomplexitate O( n ).

    Numrul factorilor primi ai valorii npoate fi cel mult [log2n]. Pentru un numr mdat, folosirea algoritmului prezentat pentru determinarea puterii la care apare pn des-compunerea n factori primi a valorii m! necesit parcurgerea a [logpm] pai.

    Ca urmare, operaia de determinare a valorii kare ordinul de complexitate O(log m) O(log n) = O(log m log n).

    Ieirea const ntr-un singur numr, aadar ordinul de complexitate al operaiei descriere a datelor este O(1).

    n concluzie, algoritmul de rezolvare a acestei probleme are ordinul de complexita-

    te O(1) + O( n ) + O(log m log n) + O(1) = O( n +log m log n).

    1.3.5. SoldaiSe observ c pentru primul bastion va trebui s alegem o submulime a soldailor carepot duce un numr total de pachete divizibil cu valoarea n. Pentru al doilea bastion,dintre cei ksoldai rmai va trebui s alegem o submulime a soldailor care pot duceun numr total de pachete divizibil cu valoarea k. Aadar, pentru al doilea bastionavem aceeai problem pentru o valoare kstrict mai mic dect n.

    Practic, la fiecare pas vom rezolva aceeai problem pentru valori din ce n ce maimici pn n momentul n care nu mai exist nici un soldat.

    Aadar, la fiecare pas va trebui s determinm o submulime a unei mulimi cu k

    elemente a crei sum s fie divizibil cu k. n acest scop vom folosiprincipiul cutieilui Dirichlet.Presupunem c, la un moment dat, cei ksoldai rmai pot duce a1, a2, ..., respectiv

    akpachete. Vom calcula sumele Si= a1+ a2+ ... + aifolosind formula recurent S1=a1i Si= ai+ Si-1pentru toate valorile icuprinse ntre 2 i k.

    Potrivit principiului cutiei lui Dirichlet, dac resturile mpririi valorilor Si la ksunt distincte, atunci unul dintre aceste resturi este 0.

    Potrivit aceluiai principiu, dac resturile nu sunt distincte, atunci dou dintre aces-tea sunt egale. Dac resturile mpririi valorilor Sui Svsunt egale, atunci restul m-pririi valorii Sv Sula keste 0. Aadar, valoarea au+1+ au+2+ ... + avva fi divizibilcu k.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    31/57

    OLI Cluj-Napoca 2003 41

    n concluzie, va exista ntotdeauna posibilitatea de a alege o submulime a creisum s fie divizibil cu k. Dup alegerea acestei submulimi, dac ea nu conine toatecele kelemente, va trebui s rezolvm aceeai problem pentru o valoare strict maimic dect k(elementele mulimii respective sunt eliminate).

    Analiza complexitiiIntrarea const n citirea valorilor corespunztoare celor n soldai, deci ordinul de

    complexitate al operaiei de citire a datelor este O(n).La fiecare pas va trebui s determinm sumele Si, operaie care are ordinul de com-plexitate O(k), unde k= O(n) este numrul soldailor rmai la pasul respectiv.

    Pe parcursul determinrii sumelor vom pstra i resturile mpririi lor la k, aadarvom putea identifica elementele care vor fi eliminate pe parcursul determinrii sume-lor. Eliminarea propriu-zis este realizat n timp liniar. n cazul cel mai defavorabil,la fiecare pas vom elimina un singur element, aadar putem avea cel mult npai. Caurmare, ordinul de complexitate al operaiei de repartizare a soldailor este O(n) O(n)= O(n2).

    Datele de ieire sunt scrise pe parcursul determinrii soluiilor, deci operaia descriere a acestora nu consum timp suplimentar.

    n concluzie, algoritmul de rezolvare a acestei probleme are ordinul de complexita-

    te O(n) + O(n2

    ) = O(n2

    ).

    1.3.6. GrafPentru a determina cel mai ndeprtat nod fa de cel identificat prin valoarea 1 va tre-bui s realizm o parcurgere n lime (Breadth First BF) a grafului.

    O astfel de parcurgere implic atingerea nodurilor mai apropiate de nodul 1 nain-tea atingerii nodurilor mai ndeprtate.

    Ca urmare, ultimul nod atins de o astfel de parcurgere va fi ntotdeauna unul dintrecele mai ndeprtate noduri, chiar dac exist i alte noduri aflate la aceeai distan.

    Dup determinarea ultimului nod parcurs vom scrie n fiierul de ieire numrulsu de ordine.

    Analiza complexitiiIntrarea const n citirea informaiilor referitoare la cele mmuchii ale grafului, deciordinul de complexitate al operaiei de citire a datelor este O(m). Pe parcursul citiriieste construit i structura de date n care va fi pstrat graful, deci nu este consumat

    timp suplimentar pentru generarea acesteia.Operaia de parcurgerea n lime a unui graf are ordinul de complexitate O(m).Datele de ieire constau ntr-un singur numr, aadar ordinul de complexitate al

    operaiei de scriere este O(1).n concluzie, algoritmul de rezolvare a acestei probleme are ordinul de complexita-

    te O(m) + O(m) + O(1) = O(m).

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    32/57

    42 Soluiile problemelor propuse la Olimpiadele de Informatic

    1.4. Soluiile problemelor propuse spre rezolvare laOlimpiada Naional de Informatic, 2002

    1.4.1. Reconstrucie

    Rezolvarea acestei probleme este foarte simpl, ea neimplicnd dect parcurgerea pecoloane a unei matrice, contorizarea unor secvene de zerouri i pstrarea unei statis-tici referitoare la aceste secvene.

    Pentru a determina blocurile necesare, vom determina blocurile pe fiecare coloan(datorit faptului c limea unui bloc este ntotdeauna 1 i toate blocurile sunt dispusepe vertical, un bloc poate ocupa o singur coloan).

    Pentru a determina blocurile de pe o coloan va trebui s determinm secvenele dezerouri de pe coloana respectiv. Vom lua n considerare doar secvenele de lungimemaxim pentru a minimiza numrul total de blocuri. De exemplu, dac avem ase ze-rouri consecutive, am putea folosi un bloc de lungime 6, dar i dou blocuri de lungi-me 5 i 1, 4 i 2 etc. Evident, este obligatoriu s folosim un singur bloc pentru ca nu-mrul total al blocurilor utilizate s fie minim.

    Aadar, pentru fiecare coloan vom determina lungimile secvenelor de zerouri. Osecven de zerouri poate ncepe fie pe prima linie a coloanei, fie n momentul n care

    ntlnim o linie pe care se afl un element cu valoarea 0, n timp ce pe linia anterioarse afl un element cu valoarea 1. Secvena se va termina fie la terminarea parcurgeriicoloanei (se ajunge pe ultima linie a acesteia), fie n momentul n care ntlnim o liniepe care se afl un element cu valoarea 1, n timp ce pe linia anterioar se afl un ele-ment cu valoarea 0.

    n momentul detectrii terminrii unei secvene (presupunem c lungimea acesteiaestex), numrul blocurilor de lungimexeste incrementat. Pentru pstrarea numruluide blocuri se utilizeaz un ir a, unde axindic numrul blocurilor de lungimex.

    La sfrit, vom afia statistica cerut pe baza datelor pstrate n irul a. Vor fi afia-te toate perechile de forma iaicare respect condiia ai0.

    Analiza complexitiiDatorit faptului c numrul de elemente care compun o secven de zerouri poate fideterminat pe msur ce se parcurge secvena, ntregul algoritm const ntr-o singur

    traversare a matricei. Ordinul de complexitate al unei astfel de traversri este O(m n),unde mreprezint numrul de linii ale matricei, iar nreprezint numrul de coloane.

    Pentru citirea datelor, matricea este parcurs o singur dat, deci ordinul decomplexitate al acestei operaii este tot O(m n).

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    33/57

    ONI 2002 43

    Pentru afiarea datelor se parcurge o singur dat irul a; acesta nu poate coninemai mult de melemente, deoarece nu pot fi folosite blocuri mai nalte dect nlimeazidului. Aadar, scrierea soluiei are ordinul de complexitate O(m).

    n concluzie, ordinul de complexitate al algoritmului de rezolvare a acestei proble-me este O(m n) + O(m n) + O(m) = O(m n).

    1.4.2. PodRezolvarea problemei se bazeaz pe o variant simpl a metodeiprogramrii dinami-ce. Se observ foarte uor c numrul de posibiliti de a ajunge pe cea de-a i-a scn-dur depinde doar de numrul de posibiliti de a ajunge pe cele trei scnduri aflate nfaa ei. Vom nota cu tinumrul de posibiliti de a ajunge pe cea de-a i-a scndur.Vom considera malul opus ca fiind cea de-a (N+ 1)-a scndur, undeNeste numrulscndurilor care formeaz podul. Soluia problemei va fi dat de valoarea tN+1.

    n cazul n care cea de-a i-a scndur lipsete, pe ea nu se poate ajunge, deci vomavea ti= 0.

    n cazul n care aceast scndur exist, dar este deteriorat, pe ea se poate ajungedoar de pe scndura precedent, deci vom avea ti= ti-1.

    n cazul n care scndura exist i nu este deteriorat, pe ea se poate ajunge de pe

    scndura anterioar (chiar dac este deteriorat) sau de pe oricare dintre precedenteledou (dac nu sunt deteriorate). Pentru a exprima relaia matematic pentru ti, vomfolosi funcia i definit prin si= ti,dac a i-a scndur exist i nu este deteriorat i si= 0 n caz contrar. Folosind aceast funcie, relaia este ti= si-3+ si-2+ ti-1.

    Iniial, vom avea t0= 1, deoarece se poate spune c exist o singur posibilitate dea ajunge pe malul pe care ne aflm.

    Datorit faptului c valorile tipot avea pn la 80 de cifre, este necesar simulareaoperaiei de adunare pentru numere mari.

    Determinarea unei soluii corecte se poate realiza destul de uor dac, la fiecarepas, pstrm indicele unei scnduri anterioare de pe care se poate trece pe scnduracurent. Acest indice va fi fie cel al scndurii anterioare (dac aceasta exist i num-rul posibilitilor de a ajunge la ea este nenul), fie al uneia dintre precedentele dou

    (dac exist, nu este deteriorat i numrul posibilitilor de a ajunge la ea este nenul).Dac valoarea tN+1este nenul, atunci exist cu siguran cel puin o soluie. n final,modalitatea de traversare va fi generat cu ajutorul unei tehnici recursive foarte sim-ple.

    Analiza complexitiiOperaia de adunare a numerelor mari are ordinul de complexitate O(NCif), undeNCifeste numrul de cifre al celui mai mare dintre numerele care se adun. DeoareceNCifeste cel mult 80, ordinul de complexitate al operaiei de adunare poate fi considerat afi O(80) = 80 O(1) = O(1).

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    34/57

    44 Soluiile problemelor propuse la Olimpiadele de Informatic

    Trebuie efectuate cel mult 2 Nastfel de adunri, deci operaia de determinare avalorilor tiare ordinul de complexitate O(N) O(1) = O(N).

    Pentru reconstituirea drumului, la fiecare pas trebuie pstrat indicele unei scnduriprecedente de pe care se poate ajunge pe scndura curent. Exist doar trei posibilitide a ajunge pe scndura curent, deci ordinul de complexitate al acestei operaii esteO(1). Pentru determinarea scndurii anterioare corespunztoare fiecrei scnduri dincomponena podului sunt efectuate O(N) astfel de operaii, deci ordinul de complexita-

    te al operaiei de determinare a unei modaliti de traversare este O(N).Citirea datelor de intrare se realizeaz ntr-un timp cu ordinul de complexitateO(N), deoarece pot exista cel multN 1 scnduri care lipsesc i cel mult Ncare suntdeteriorate.

    Scrierea datelor de ieire const n generarea unei modaliti de traversare (care arelungimea cel multN) i a numrului modalitilor de traversare. Deoarece determina-rea scndurii precedente se realizeaz pe baza unor indici pstrai pentru fiecare scn-dur n parte, ordinul de complexitate al acestei operaii este O(1). Datorit faptului c

    vor fi cel multNastfel de determinri, ordinul de complexitate al operaiei de deter-minare a modalitii de traversare este O(N). Scrierea numrului posibilitilor de tra-

    versare poate fi considerat a fi o operaie elementar, deci are ordinul de complexitateO(1). Aadar, ordinul de complexitate al operaiei de scriere a datelor de ieire esteO(N) + O(1) = O(N).

    n concluzie, algoritmul de rezolvare al acestei probleme are ordinul de complexi-tate O(N) + O(N) + O(N) + O(N) = O(N).

    1.4.3. SumaPentru ca numrul termenilor s fie minim, trebuie ca suma termenilor care apar cusemn negativ s fie ct mai mic posibil.

    Iniial vom presupune c nu va trebui s scdem nici o valoare i ne propunem sgsim cel mai mic numrNpentru care:

    SiS

    N

    i

    N ==1

    .

    ValoareaNse obine rezolvnd ecuaia de gradul II SN= S(vom avea SNS+N) irotunjind prin adaos rdcina pozitiv obinut. Avem:

    .2

    181

    02

    2

    )1(

    2

    +=

    =+

    =+

    SN

    SNN

    SNN

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    35/57

    ONI 2002 45

    Aadar, valoareaNeste:

    +=

    2

    181 SN .

    Datorit faptului cNeste cea mai mic valoare pentru care suma atinge sau dep-ete valoarea S, soluia problemei nu poate fi dat de nici un numrN'N'vom scdeaN'iN'x, iar n caz contrar vom scdea doarx.

    Analiza complexitiiValoarea Npoate fi obinut folosind o simpl formul matematic, deci ordinul decomplexitate al acestei operaii este O(1).

    Valorile SN, SN+1, SN+2, DN, DN+1, DN+2 sunt calculate tot cu ajutorul unor formulematematice simple, aadar ordinul de complexitate al operaiei de determinare a aces-

    tora este tot O(1).Identificarea valorii N' se face pe baza verificrii paritii a cel mult trei numere,deci i aceast operaie are ordinul de complexitate O(1).

    Determinarea valorii x i a celor cel mult dou numere crora li se va modificasemnul este realizat tot pe baza unor calcule simple al cror ordin de complexitateeste O(1).

    n concluzie, ordinul de complexitate al unui algoritm eficient de rezolvare a aces-tei probleme este O(1) + O(1) + O(1) + O(1) = O(1).

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    36/57

    46 Soluiile problemelor propuse la Olimpiadele de Informatic

    1.4.4. BecuriEste evident c pentru a obine prima linie a matricei, conform cerinelor, nu putemdect fie s comutm toate coloanele pe care trebuie s se afle becuri aprinse i s nucomutm prima linie, fie s comutm prima linie i s comutm toate coloanele pecare trebuie s se afle becuri stinse. Analog, pentru prima coloan putem fie s comu-

    tm toate liniile pe care trebuie s se afle becuri aprinse i s nu comutm prima co-loan, fie s comutm prima coloan i s comutm toate liniile pe care trebuie s se

    afle becuri stinse. Astfel avem patru posibiliti de a obine configuraia cerut: comutm liniile crora le corespund becuri aprinse pe prima coloan i coloanele

    crora le corespund becuri aprinse pe prima linie; comutm liniile crora le corespund becuri aprinse pe prima coloan i coloanele

    crora le corespund becuri stinse pe prima linie; comutm liniile crora le corespund becuri stinse pe prima coloan i coloanele

    crora le corespund becuri aprinse pe prima linie; comutm liniile crora le corespund becuri stinse pe prima coloan i coloanele

    crora le corespund becuri stinse pe prima linie.

    Vom verifica fiecare dintre aceste patru variante i apoi o vom alege pe cea careimplic cele mai puine comutri de linii i coloane.

    Dac nici una dintre cele patru variante nu duce la obinerea configuraiei cerute,putem trage concluzia c aceasta nu poate fi obinut prin comutarea unor linii i aunor coloane.

    Analiza complexitiiCitirea datelor de intrare implic parcurgerea unei matrice ptratice, deci ordinul decomplexitate al acestei operaii este O(N2).

    Verificarea fiecreia dintre cele patru posibiliti de a obine soluia implic par-curgerea primei linii i a primei coloane; ordinul de complexitate al unei astfel de par-curgere este O(N) + O(N) = O(N). Pentru fiecare element este posibil ca linia/coloana

    corespunztoare s fie comutat. Operaia de comutare implic traversarea liniei saucoloanei, aadar are ordinul de complexitate O(N). Ca urmare, ordinul de complexitateal fiecreia dintre cele patru posibiliti este O(N) O(N) = O(N2). ntreaga operaie dedeterminare a soluiei are ordinul de complexitate 4 O(N2) = O(N2).

    Scrierea datelor de ieire implic traversarea irurilor care indic dac o linie saucoloan a fost comutat; ordinul de complexitate al operaiei este O(N).

    n concluzie, algoritmul de rezolvare al acestei probleme are ordinul de comple-xitate O(N2) + O(N2) + O(N) = O(N2).

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    37/57

    ONI 2002 47

    1.4.5. DiscuriPentru identificarea discurilor dispensabile va trebui s determinm atingerile dintrediscurile care influeneaz limea figurii. De exemplu, dac avem ase discuri, cu razede 1000, 1, 2, 3, 1000, respectiv 500, atunci atingerile care influeneaz limea figuriisunt ntre primul i al cincilea disc, respectiv ntre al cincilea i al aselea.

    Pentru fiecare disc ivom determina, pe rnd, coordonatele orizontale pe care le-aravea discul dac ar atinge unul dintre discurile anterioare. n final, vom alege discul

    (sau axa Oy) pentru care coordonata orizontal a centrului noului disc este maxim iputem afirma c discul iajunge n aceast poziie. Dac discul iva atinge un disc ante-rior j, atunci discurile cu numerele de ordine cuprinse ntre j + 1 i i 1 suntdispensabile.

    Dup ce vom lua n considerare toate celeNdiscuri, vom putea determina numere-le de ordine ale tuturor discurilor dispensabile.

    n final vom verifica dac exist discuri introduse la sfrit care sunt dispensabile.Pentru aceasta vom determina limea figurii i ultimul disc care o influeneaz. Toatediscurile introduse dup acest disc sunt dispensabile.

    Pentru determinarea coordonatei orizontalexia centrului unui disc icare atinge undiscjavem nevoie de coordonata orizontalxja centrului disculuij, precum i de raze-le rii rjale celor dou discuri.

    Dac aceste trei valori sunt cunoscute, se poate folosi urmtoarea formul pentru adetermina coordonata orizontal a centrului disculuij:

    22 )()( jijiij rrrrxx ++= .

    Analiza complexitiiPentru fiecare disc i care este introdus, se determin posibila coordonat xidatoratatingerii cu toate cele i 1 discuri inserate anterior. Pentru cele Ndiscuri se vor de-

    termina, n total, N (N + 1) / 2 coordonate, deci ordinul de complexitate al acesteioperaii este O(N2).

    La fiecare pas, pot fi marcate ca dispensabile cel mult toate discurile inserate ante-rior, aadar ordinul de complexitate al acestei operaii este tot O(N2).

    Determinarea limii figurii i a cercurilor dispensabile de la sfritul secvenei ne-cesit o singur parcurgere a irului care pstreaz coordonatele centrelor discurilor,ceea ce implic ordinul de complexitate O(N).

    Afiarea cercurilor dispensabile, precum i citirea razelor cercurilor sunt operaiicare se efectueaz n timp liniar, necesitnd o simpl parcurgere a unor iruri.

    n concluzie, ordinul de complexitate al algoritmului de rezolvare a acestei proble-me este O(N2) + O(N2) + O(N) + O(N) + O(N) = O(N2).

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    38/57

    48 Soluiile problemelor propuse la Olimpiadele de Informatic

    1.4.6. CodDin condiiile precizate n enun rezult c, pe baza unei mulimi de litere distincte, sepoate construi un singur cuvnt care respect condiiile date, i anume cel care conineliterele ordonate lexicografic. Aadar, oricrei mulimi de cel mult zece litere distincte

    i corespunde un cuvnt care respect condiiile din enun. Se poate afirma c un cu-vnt este o submulime a mulimii literelor; de aici rezult c numrul cuvintelor for-

    mate din klitere estek

    C26 . Mai mult, numrul cuvintelor formate din kdintre ultimele

    nlitere ale alfabetului estek

    nC .

    Numrul de ordine al cuvntului dat este mai mare dect cel al codurilor formatedin mai multe cifre. Din aceste motive, pentru un cuvnt format din klitere, vom avea

    un cod mai mare dect =

    k

    i

    iC

    1

    26 .

    n continuare, pentru prima liter a cuvntului, va trebui s gsim numrul cuvinte-lor care ncep cu o liter mai mic (din punct de vedere lexicografic). n cazul n care

    cuvntul are klitere, vor exista1

    25

    kC cuvinte valide care ncep cu 'a',

    1

    24

    kC cuvinte va-

    lide care ncep cu 'b' etc. n general, vor exista1

    26

    k

    iC cuvinte valide care ncep cu a i-a

    liter a alfabetului. Dac prima liter a cuvntului este cea de-a n-a liter a alfabetului,vom avea

    =

    n

    i

    k

    iC

    1

    1

    26 cuvinte valide care ncep cu o liter mai mic.

    n acest moment tim numrul de ordine minim al unui cuvnt care ncepe cu primaliter a cuvntului dat. Pentru a doua liter vom proceda ntr-o manier asemntoare.Singura diferen este dat de faptul c a doua liter trebuie s fie strict mai mare dectprima. Aadar, dac prima liter este cea de-a n-a a alfabetului, iar a doua este cea de-a

    m-a, atunci vom avea

    +=

    1

    1

    2

    26

    m

    ni

    k

    iC cuvinte care au pe prima poziie aceeai liter, iar pe

    cea de-a doua poziie o liter mai mic.Procedeul va continua pentru fiecare liter n parte. n cazul n care litera curent

    este cea de-ap-a a cuvntului, este a m-a liter a alfabetului, iar litera anterioar este an-a liter a alfabetului, numrul de cuvinte care au pe primele p 1 poziii aceleailitere ca i cuvntul dat, iar pe cea de-ap-a poziie o liter mai mic, este dat de for-

    mula

    +=

    1

    1

    26

    m

    ni

    pk

    iC .

    Adunnd toate valorile obinute pe parcurs vom obine numrul cuvintelor care seafl naintea cuvntului dat. Adunnd 1 la aceast valoare, vom obine numrul de or-dine al cuvntului.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    39/57

    ONI 2002 49

    Analiza complexitiiPentru a analiza complexitatea acestui algoritm va trebui s precizm faptul c num-rul literelor din alfabet este constant, deci nu poate interveni n exprimarea ordinuluide complexitate. Acesta va fi stabilit doar n funcie de lungimea ka cuvntului.

    Iniial se calculeaz suma =

    k

    i

    iC

    1

    26 , operaie realizabil n timp liniar, avnd n vede-

    re observaia anterioar. Aadar, primul pas al algoritmului are ordinul de complexita-te O(k).

    Pentru fiecare liter a cuvntului se calculeaz suma

    +=

    1

    1

    2

    26

    m

    ni

    k

    iC , unde variabilele au

    semnificaia prezentat anterior. Numrul de litere este implicat n determinarea valo-rii combinrii. Aadar, calculul combinrii se realizeaz n timp liniar. Numrul decombinri calculate nu depinde de lungimea cuvntului, deci ordinul de complexitateal calculrii acestei sume este O(k). n total vor fi calculate kastfel de sume, deci ordi-nul de complexitate al celui de-al doilea pas al algoritmului este O(k) O(k) = O(k2).

    Citirea datelor de intrare i scrierea celor de ieire se realizeaz cu ajutorul unoroperaii elementare, deci putem considera c au ordinul de complexitate O(1).

    n concluzie, ordinul de complexitate al algoritmului de rezolvare a acestei proble-

    me este O(k) + O(k2) + O(1) = O(k2), avnd n vedere c numrul literelor din alfabetulenglez este constant.

    1.4.7. HotelPentru nceput, vom determina numrul de etaje la care exist angajai i vom atribuifiecrui etaj cte o culoare. Pe msur ce citim datele referitoare la angajai, vom veri-fica dac etajul la care lucreaz angajatul are asociat o culoare i, dac este cazul, i

    vom atribui o culoare i vom crete numrul etajelor distincte. Dac ajungem n situa-ia n care numrul culorilor disponibile este mai mic dect numrul etajelor distincte,atunci problema nu are soluie. Atribuind cte o culoare fiecrui etaj, practic, am re-zolvat cea de-a doua parte a problemei.

    Pentru prima parte vom considera c avem la dispoziie n culori i exist k etajedistincte la care lucreaz angajai. Va trebui s determinm numrul de posibiliti dea atribui celor ketaje cte o culoare, astfel nct fiecare etaj s aib propria sa culoare.

    Practic, avnd la dispoziie o mulime format din nelemente va trebui s determi-nm cte posibiliti de alegere a kdintre aceste elemente exist. Este foarte uor deobservat c, de fapt, propoziia anterioar reprezint definiia noiunii matematice dearanjamente. Aadar, soluia primei pri a problemei este dat de formula:

    .)1()2()1()!(

    !nnknkn

    kn

    nA

    k

    n ++=

    = L

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    40/57

    50 Soluiile problemelor propuse la Olimpiadele de Informatic

    Datorit faptului c se obin numere foarte mari, nu se pot folosi tipurile de datepuse la dispoziie de limbajele de programare pentru operaii aritmetice. Se observ c,folosind formula anterioar, avem nevoie doar de nmuliri dintre un numr mare i unnumr cel mult egal cu 200. Ca urmare, va trebui s implementm operaia de nmuli-re a unui numr mare cu un scalar. Pentru a mri viteza de execuie a programului i autiliza mai eficient memoria, se poate folosi baza 10000 pentru efectuarea calculelor.

    Analiza complexitiiCitirea datelor de intrare se realizeaz n timp liniar, deci ordinul de complexitate alacestei operaii este O(n).

    Verificarea faptului c unui etaj i corespunde o culoare i eventuala atribuire a uneiculori se realizeaz n timp constant. Deoarece aceast operaie se realizeaz pentruetajul corespunztor fiecrui angajat, stabilirea corespondenei dintre etaje i culori serealizeaz ntr-un timp cu ordinul de complexitate O(n) O(1) = O(n).

    Calcularea numrului de modaliti de alegere a culorilor implic folosirea numere-lor mari. Se observ c numrul de cifre (n baza 10000) al rezultatului este mai micdect 100, aadar putem considera c o nmulire se realizeaz n timp liniar. Numrul

    nmulirilor efectuate este k, deci ordinul de complexitate al operaiei de determinare arezultatului este O(k).

    Afiarea numrului de modaliti este realizat n timp constant, iar operaia de afi-are a culorilor corespunztoare fiecrui angajat are ordinul de complexitate O(n).

    n concluzie, ordinul de complexitate al algoritmului de rezolvare a acestei proble-me este O(n) + O(n) + O(k) + O(1) + O(n) = O(k+ n).

    1.4.8. LacPentru rezolvarea acestei probleme vom folosi o variant puin modificat a algorit-mului luiLee. Pentru fiecare poziie a matricei care reprezint o zon mltinoas vomdetermina numrul minim de pontoane care trebuie s fie amplasate pentru a se ajunge

    n poziia respectiv.Pentru aceasta vom considera c pentru a ajunge n imediata vecintate a primei

    linii a matricei numrul de pontoane necesare este 0. Pentru o anumit poziie, num-rul de pontoane necesare ajungerii n punctul respectiv este dat de cel mai mic numrcorespunztor uneia dintre poziiile nvecinate la care se adaug, eventual, un pontondac poziia nu corespunde unei poriuni de uscat.

    Dup o astfel de parcurgere a matricei, vom avea pentru fiecare poziie a matricei oanumit valoare, dar nu suntem siguri c aceasta este cea minim. Vom parcurge suc-cesiv matricea ncercnd s mbuntim valorile obinute. O valoare va fi modificatdac se poate ajunge n poziia curent dintr-o poziie nvecinat i se obine un numrmai mic de pontoane pentru poziia curent. n momentul n care nu va mai exista nicio parcurgere care s aduc mbuntiri, am obinut rezultatul final.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    41/57

    ONI 2002 51

    Practic cele dou tipuri de parcurgeri pot fi "asimilate" n una singur dac, iniial,se marcheaz toate poziiile matricei cu o valoare suficient de mare. De fiecare datcnd are loc o mbuntire, vom pstra direcia din care s-a ajuns n poziia curentpentru a putea reconstitui drumul.

    n final, numrul minim de pontoane va fi dat de cea mai mic valoare de pe ultimalinie a matricei. Pentru reconstituirea drumului, se va porni n sens invers, de pe pozi-ia de pe ultima linie n poziia din care s-a ajuns n ea i aa mai departe, pn se

    ajunge pe prima linie. Dac se ajunge ntr-o poziie care nu corespunde unei zone deuscat, atunci va trebui amplasat un ponton n acea poziie.

    Analiza complexitiiCitirea datelor de intrare implic o traversare a matricei, ordinul de complexitate alacestei operaii fiind O(m n).

    O parcurgere a matricei n vederea realizrii unei mbuntiri are acelai ordin decomplexitate. Datorit faptului c, dup prima parcurgere, suntem siguri c se poateajunge pe ultima linie folosind mpontoane (completarea integral a coloanei), nu se

    vor realiza n nici o situaie mai mult de mparcurgeri de mbuntire. Din aceste mo-tive, ordinul de complexitate al operaiei de determinare a numrului de pontoane ne-cesare pentru ajungerea n fiecare poziie este O(m) O(m n) = O(m2 n).

    Determinarea valorii minime de pe ultima linie se realizeaz n timp liniar, ordinulde complexitate fiind O(n).

    Reconstituirea drumului ar putea, teoretic, s necesite traversarea ntregii matrice.Astfel, n cel mai defavorabil caz, ordinul de complexitate al acestei operaii este O(m n).

    n concluzie, ordinul de complexitate al algoritmului de rezolvare a acestei proble-me este O(m n) + O(m2 n) + O(n) + O(m n) = O(m2 n).

    1.4.9. LogicPentru nceput vom observa c, pentru ca trasarea s fie posibil, fiecare zon trebuies fie delimitat de un numr par de segmente. Aceasta se datoreaz faptului c linia

    trebuie s intre i s ias din fiecare zon de un anumit numr de ori.Aadar, pentru fiecare zon va trebui s numrm segmentele (aa cum sunt defini-te ele n enun) care o delimiteaz i s verificm dac numrul obinut este par sauimpar. n momentul n care gsim o zon delimitat de un numr par de segmente,

    vom ti c trasarea nu este posibil. Dac toate zonele sunt delimitate de un numr parde segmente, atunci trasarea este posibil.

    Numrarea segmentelor care delimiteaz o zon se realizeaz pe baza unui algo-ritm de umplere. n momentul n care ajungem la un punct de la marginea zonei, sepune problema creterii numrului de segmente. Exist mai multe situaii n care nu-mrul de segmente va crete:

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    42/57

    52 Soluiile problemelor propuse la Olimpiadele de Informatic

    se ajunge n partea de sus a zonei, iar punctul aflat imediat deasupra i cel dindreapta acestuia fac parte din zone diferite;

    se ajunge n partea de jos a zonei, iar punctul aflat imediat dedesubt i cel dindreapta acestuia fac parte din zone diferite;

    se ajunge n partea din stnga a zonei, iar punctul aflat imediat la stnga i cel dedeasupra sa fac parte din zone diferite;

    se ajunge n partea din dreapta a zonei, iar punctul aflat imediat la dreapta i cel dedeasupra sa fac parte din zone diferite; se ajunge ntr-unul din colurile zonei.

    Dac ultima condiie este ndeplinit simultan cu una dintre primele patru, numrulsegmentelor va crete doar cu 1. Creterile datorate primelor patru condiii sunt cumu-lative.

    Analiza complexitiiVom studia acum complexitatea algoritmului pentru un desen. Citirea datelor de intra-re implic o traversare a matricei, deci aceast operaie se realizeaz ntr-un timp deordinul O(n2).

    La fiecare pas al algoritmului de umplere se numr segmentele care trebuie adu-gate pentru poziia curent. Se pot aduga cel mult patru segmente, aadar ordinul decomplexitate al operaiei este O(1). Algoritmul de umplere implic parcurgerea inte-gral a matricei, motiv pentru care vor fi vizitate toate cele n2poziii. Aadar, algorit-mul de verificare a posibilitii de trasare a liniei are ordinul de complexitate O(n2) O(1) = O(n2).

    Datele de ieire constau din scrierea unui singur mesaj, deci aceast operaie seefectueaz n timp liniar.

    n concluzie, algoritmul de rezolvare a acestei probleme, pentru un desen, are ordi-nul de complexitate O(n2) + O(n2) + O(1) = O(n2).

    Pentru a stabili ordinul de complexitate al algoritmului de rezolvare a ntregii pro-bleme, vom considera c un set de date cuprinde tdesene. Aadar, ordinul de comple-xitate este O(t) O(n2) = O(n2 t).

    1.4.10. FotoSe observ foarte uor c exist doar nou posibiliti de lipire a patru fotografii pe opagin, indiferent de dimensiunile acestora. Toate celelalte posibiliti sunt echivalen-

    te cu una dintre cele nou, ele obinndu-se prin translatri sau oglindiri. Cele nouaranjamente posibile pe care le vom lua n considerare sunt prezentate n figura urm-

    toare.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    43/57

    ONI 2002 53

    Modaliti de amplasare

    Va trebui s alegem poziiile celor patru fotografii pentru fiecare dintre cele nouconfiguraii. Teoretic, pentru fiecare dintre cele nou configuraii, exist 4! = 24 posi-biliti. Practic, se observ c exist i n acest caz configuraii echivalente. De exem-plu, pentru prima i a doua configuraie, nu conteaz ordinea n care sunt aezate foto-grafiile, pentru a treia configuraie nu conteaz ordinea n care sunt dispuse cele treipoze de pe a doua coloan etc. Practic, pentru fiecare configuraie vom avea 1, 2, 4, 6

    sau 12 posibiliti.Cu excepia ultimei configuraii, n toate celelalte exist o fotografie care ocup o

    ntreag latur a paginii. Cunoscnd raportul dintre lungimea i limea sa se determi-n laturile spaiului liber rmas pe foaie. n continuare, una dintre laturile spaiuluieste ocupat integral de o fotografie. Procedura continu pn determinm dimensiunile

    tuturor fotografiilor. n final se verific dac foaia este acoperit integral. Pentru ulti-ma configuraie vom alege, pe rnd, dimensiunile posibile ale fotografiei din colul dinstnga-sus i dimensiunile celorlalte fotografii vor fi determinate n acelai mod ca i

    n situaiile anterioare.

    Analiza complexitiiCitirea datelor se realizeaz n timp constant, deoarece numrul fotografiilor este n-

    totdeauna 4. Studierea primelor opt configuraii se realizeaz, de asemenea, n timpconstant, deoarece numrul posibilitilor de amplasare a fotografiilor respectnd con-figuraiile considerate este constant.

    Pentru cea de-a noua configuraie putem avea cel mult min(X, Y) dimensiuni posi-bile ale primei fotografii, undeXi Ysunt dimensiunile paginii. Dac notm cu nacestminim, ordinul de complexitate al acestei operaii va fi O(n).

    Datele de ieire constau n exact opt numere, deci scrierea rezultatelor se realizeazn timp constant.

    n concluzie, algoritmul de rezolvare a acestei probleme are ordinul de complexita-te O(1) + 8 O(1) + O(n) + O(1) = O(n).

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    44/57

    54 Soluiile problemelor propuse la Olimpiadele de Informatic

    1.4.11. BalanSe observ c suma momentelor greutilor este cuprins ntre -6000 i 6000 (dac avem20 de greuti cu valoarea 20 i acestea sunt amplasate pe cel mai ndeprtat crlig fade centrul balanei, atunci modulul sumei momentelor forelor este 15 20 20 = 6000).Ca urmare, putem pstra un ir aale crui valori aivor conine numrul posibilitilor casuma momentelor greutilor s fie i. Indicii irului vor varia ntre -6000 i 6000. Pentrua mbunti viteza de execuie a programului, indicii vor varia ntre -300 gi 300 g,

    undegeste numrul greutilor. Pot fi realizate mbuntiri suplimentare dac se deter-min distanele maxime fa de mijlocul balanei ale celor mai ndeprtate crlige de pecele dou talere i suma total a greutilor. Dac distanele sunt d1i d2, iar suma este s,atunci indicii vor varia ntre -d1 si d2 s.

    Iniial, pe balan nu este agat nici o greutate, aadar suma momentelor greuti-lor este 0. Ca urmare, iniial valorile aivor fi 0 pentru orice indice nenul i a0 = 1(exist o posibilitate ca iniial suma momentelor greutilor s fie 0 i nu exist nici oposibilitate ca ea s fie diferit de 0).

    n continuare, vom ncerca s amplasm greutile pe crlige. Fiecare greutate poa-te fi amplasat pe oricare dintre crlige. S presupunem c la un moment dat exist aiposibiliti de a obine suma i. Dac vom amplasa o greutate de valoaregpe un crligaflat la distana d fa de centrul balanei, suma momentelor greutilor va crete sau

    va scdea cug d(n funcie de braul pe care se afl crligul). Ca urmare, dup am-plasarea noii greuti exist aiposibiliti de a obine suma i+g d. Considerm cirul b va conine valori care reprezint numrul posibilitilor de a obine sume alemomentelor forelor dup amplasarea greutii curente. nainte de a testa posibilitilede plasare a greutii, irul bva conine doar zerouri. Pentru fiecare pereche (i, d), va-loarea bi+g dva crete cu ai. Dup considerarea tuturor perechilor, vom putea trecela o nou greutate. Valorile din irul bvor fi salvate n irul a, iar irul bva fi reiniia-lizat cu 0. Rezultatul final va fi dat de valoarea a0obinut dup considerarea tuturorgreutilor disponibile.

    Analiza complexitii

    Pentru studiul complexitii vom nota numrul greutilor cug, iar cel al crligelor cu c.Citirea datelor de intrare corespunztoare crligelor i greutilor se realizeaz ntimp liniar, deci ordinul de complexitate al acestor operaii este O(g), respectiv O(c).

    Singura mrime care nu este considerat constant i de care depinde numrul deposibiliti de a obine sumele este numrul greutilor. Aadar, vom considera c or-dinul de complexitate al traversrii irului aeste O(g). Numrul de traversri este dat

    tot de numrul greutilor disponibile, deci vom avea O(g) traversri. n timpul traver-srii vom considera toate crligele pentru fiecare element al irului. Ca urmare, ordinulde complexitate al operaiilor efectuate asupra unui element ntr-o parcurgere esteO(c). Rezult c ordinul de complexitate al unei parcurgeri este O(g) O(c) = O(g c),

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    45/57

    ONI 2002 55

    n timp ce ordinul de complexitate al ntregii operaii care duce la obinerea rezultatu-lui este O(g) O(g c) = O(g2 c).

    Afiarea numrului de posibiliti de a echilibra balana se realizeaz n timp con-stant.

    n concluzie, ordinul de complexitate al algoritmului de rezolvare a acestei proble-me este O(c) + O(g) + O(g2 c) + O(1) = O(g2 c).

    1.4.12. AlinierePentru fiecare soldat vom determina cel mai lung subir strict cresctor (din punct de

    vedere al nlimii) de soldai care se termin cu el, respectiv cel mai lung subir strictdescresctor de soldai care urmeaz dup el. Dup aceast operaie, vom determinasoldatul pentru care suma lungimilor celor dou iruri este maxim.

    Chiar dac s-ar prea c n acest mod am gsit soluia problemei, mai exist o posi-bilitate de a mri numrul soldailor care rmn n ir. S considerm soldatul cel mai

    nalt n irul rmas (cel cruia i corespunde suma maxim). Acesta poate privi fie sprestnga, fie spre dreapta irului. Din aceste motive, la stnga sau la dreapta sa poate sse afle un soldat de aceeai nlime; unul dintre cei doi va privi spre dreapta, iar cel-lalt spre stnga. Totui, nu putem alege orice soldat cu aceeai nlime, ci doar unul

    pentru care lungimea irului strict cresctor (dac se afl spre stnga) sau a celui strictdescresctor (dac se afl spre dreapta) este aceeai cu lungimea corespunztoare iru-lui strict cresctor, respectiv strict descresctor, corespunztoare celui mai nalt soldatdintre cei rmai n ir.

    Dup identificarea celor doi soldai de nlimi egale (sau demonstrarea faptului cnu exist o pereche de acest gen care s respecte condiiile date) se marcheaz toi sol-daii din cele dou subiruri. Ceilali soldai vor trebui s prseasc formaia.

    Analiza complexitiiCitirea datelor de intrare se realizeaz n timp liniar, deci ordinul de complexitate alacestei operaii este O(n).

    Chiar dac exist algoritmi eficieni (care ruleaz n timp liniar-logaritmic) de de-

    terminare a celui mai lung subir ordonat, timpul de execuie admis ne permite folosi-rea unui algoritm simplu, cu ordinul de complexitate O(n2). Acesta va fi aplicat de do-u ori, dup care se va cuta valoarea maxim a sumei lungimilor irurilor corespunz-

    toare unui soldat; aadar identificarea soldatului care poate privi n ambele direcii esteo operaie cu ordinul de complexitate O(n2) + O(n2) + O(n) = O(n2).

    Urmeaz eventuala identificare a unui alt soldat de aceeai nlime care respectcondiiile referitoare la lungimile subirurilor. Pentru aceasta se parcurge irul soldai-lor de la soldatul identificat anterior spre extremiti; operaia necesit un timp liniar.

    Determinarea celor dou subiruri se realizeaz n timp liniar dac, n momentul con-struirii celor dou subiruri, se pstreaz predecesorul, respectiv succesorul fiecruisoldat. n timpul parcurgerii subirurilor sunt marcai soldaii care rmn n formaie.

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    46/57

    56 Soluiile problemelor propuse la Olimpiadele de Informatic

    Pentru scrierea datelor de ieire se parcurge irul marcajelor i sunt identificai sol-daii care prsesc formaia. Ordinul de complexitate al acestei operaii este O(n).

    n concluzie, ordinul de complexitate al algoritmului de rezolvare a acestei proble-me este O(n) + O(n2) + O(n) + O(n) + O(n) = O(n2).

    1.4.13. ArboreVom spune c un nod este rezolvatdac i numai dac el face parte din exact un ciclu.Similar, vom spune c un subarbore este rezolvat dac i numai dac toate nodurileacestuia sunt rezolvate.

    Vom numifirun subarbore care este lan (fiecare nod, cu excepia frunzei, are unsingur fiu). Un fir este ilustrat n figura 1.

    Fig. 1: Un fir

    Se observ c un fir poate fi rezolvat foarte simplu prin unirea rdcinii sale cufrunza sa. Evident, firul va putea fi rezolvat numai dac el conine cel puin dou no-duri. Procedeul este ilustrat n figura 2.

    Fig. 2: Un fir rezolvat

    Pentru a rezolva aceast problem vom alege, pentru nceput, un nod care va fi r-dcina arborelui. Vom spune c un subarbore este potenial rezolvabil dac toi fiiirdcinii subarborelui (n numr de cel puin doi) sunt rdcini ale unor fire.

    n continuare vom arta modul n care poate fi rezolvat un nod potenial rezolvabil.Vom alege cele mai scurte dou fire (acestea pot conine unul, dou sau mai multe

  • 8/13/2019 1201 Probleme Olimpiada Informatica

    47/57

    ONI 2002 57

    noduri) i vom uni printr-o muchie frunzele acestor fire. Astfel vom obine un ciclucare va conine nodurile din componena