Olimpiada Republicana Informatica 2004

download Olimpiada Republicana Informatica 2004

of 50

Transcript of Olimpiada Republicana Informatica 2004

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    1/50

    Olimpiada republicană 

    la Informatică 

    Ediţia 2004

    1

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    2/50

     

    Ziua 1

    Clasele 7 - 9

      2

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    3/50

     Dreptunghiuri

    Se consider ă n dreptunghiuri D1, D2, ..., Di, ...,  Dn care au laturile paralele cu axele decoordonate, iar coordonatele vîrfurilor sînt numere naturale. Fiecare dreptunghi  Di,

    , este definit prin tuplul , unde ani ...,,3,2,1= ),,,( iiii d cba i, bi  sînt coordonatele colţului

    stînga-jos, iar ci, d i − coordonatele colţului dreapta-sus ( fig. 1).Elaboraţi un program care determină  aria S   a figurii obţinute prin reuniunea celor n 

    dreptunghiuri.

     Fig. 1

    Date de intrare. Fişierul text DREPT. I N  conţine pe prima linie numărul natural n.Fiecare din următoarele n  linii ale fişierului de intrare conţine cîte patru numere naturaleseparate prin spaţiu. Linia a fişierului de intrare conţine numerele naturale a1+i i, bi, ci, d i.

    Date de ieşire. Fişierul text DREPT. OUT va conţine pe o singur ă linie numărul naturalS .

    Exemplu.

    DREPT. I N DREPT. OUT182

    1 1 5 54 3 7 4

    Restricţii. 500,,,0   ≤≤ iiii d cba , ni ...,,3,2,1= ; 501   ≤≤ n . Timpul de execuţie nu

    va depăşi o secundă. Fişierul sursă  va avea denumirea DREPT. PAS, DREPT. C  sauDREPT. CPP.

    3

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    4/50

    Rezolvare

    Conform restricţiilor din enunţul problemei, toate dreptunghiurile  D1, D2, ..., Dn se află în interiorul dreptunghiului (0, 0, 1000, 1000). Întrucît coordonatele vîrfurilor acestordreptunghiuri sînt numere naturale, putem introduce în studiu un rastru ( fig. 2), liniile căruiaformează microzonele:

    (0, 0, 1, 1); (1, 0, 2, 1), ..., )1,1,,(   ++ k  jk  j , ..., (499, 499, 500, 500).

     Fig. 2

    Din fig. 2 se observă, că aria figurii formate prin reuniunea dreptunghiurilor D1, D2, ..., Dn poate fi calculată prin verificarea apartenenţei fiecăreia din microzonele )1,1,,(   ++ k  jk  j  la cel puţin unul din dreptunghiurile în studiu. Evident, microzona apar ţine

    dreptunghiului atunci şi numai atunci cînd se respectă următoarele condiţii:

    )1,1,,(   ++ k  jk  j

    ),,,( iiii d cba

    ia j  ≥ ; ic j   ≤+1 ; ;ibk   ≥ id k    ≤+1 .

    În programul ce urmează apartenenţa microzonei )1,1,,(   ++ k  jk  j  la cel puţin unul din

    dreptunghiurile D1, D2, ..., Dn se verifică cu ajutorul funcţiei Apar t i ne.

    Program   Dr ept unghi ur i ;{ Cl asel e 7- 9 }var  n : i nt eger ;

    A, B, C, D : array[ 1. . 50] of  i nt eger ;S : l ongi nt ;I nt r are, I esi re : text ;

     procedure  Ci t i r e;{ Ci t i r ea dat el or di n f i s i er ul de i nt r ar e }var  i : i nteger ;

     begin assi gn( I nt r ar e, ' DREPT. I N' ) ;reset ( I nt rare) ;

    4

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    5/50

      r eadl n( I nt r ar e, n) ;for  i : =1 to  n do 

    r eadl n( I nt r are, A[ i ] , B[ i ] , C[ i ] , D[ i ] ) ;cl ose( I nt rare) ;

    end ; { Ci t i r e }

     procedure  Scr i e;{ Scri er ea dat el or i n f i s i er ul de i esi r e } begin 

    assi gn( I esi r e, ' DREPT. OUT' ) ;rewr i te( I esi re) ;wr i t el n( I esi re, S) ;cl ose( I esi re) ;

    end ; { Scr i e }

    function  Apar t i ne( j , k : i nt eger ) : bool ean;{ Ver i f i ca apar t enent a mi cr ozonei ( j , k, j +1, k+1) }{ l a cel put i n unul di n dr ept unghi ur i l e D[ 1] . . D[ n] }

    var  i : i nteger ;q : bool ean; begin 

    q: =f al se;for  i : =1 to  n do if >=A[ i ] ) and   ( ( j +1) =B[ i ] ) and   ( ( k+1)

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    6/50

     Strunguri

    Se consider ă  două  strunguri identice destinate prelucr ării automate a unor piese.Strungurile funcţionează  independent unul de altul. În procesul prelucr ării piesele sîntavansate către strunguri cu ajutorul unei benzi rulante (vezi fig. 1).

    Strungul 1

    Strungul 2. .

    ...123n

     

     Fig. 1

    Piesele de prelucrat sînt numerotate în ordinea apariţiei lor pe bandă  prin numerelenaturale 1, 2, 3, ..., n. Pentru fiecare piesă i se cunoaşte timpul d i necesar pentru prelucrarea ei

     pe unul din cele două strunguri.Elaboraţi un program care calculează timpul Q necesar pentru a prelucra toate piesele.

    Date de intrare. Fişierul text STRUNG. I N  conţine pe prima linie numărul natural n.Fiecare din următoarele n  linii ale fişierului de intrare conţine cîte un număr natural. Linia

    a fişierului de intrare conţine numărul natural d 1+i i  −  timpul necesar pentru prelucrarea piesei i pe unul din cele două strunguri.

    Date de ieşire. Fişierul text STRUNG. OUT va conţine pe o singur ă linie numărul naturalQ − timpul necesar pentru a prelucra toate piesele.

    Exemplu.

    STRUNG. I N STRUNG. OUT45

    31121

    Restricţii. 10001   ≤≤ n ; 301   ≤≤ id  , ni ...,,3,2,1= . Timpul de execuţie nu va depăşi o

    secundă. Fişierul sursă va avea denumirea STRUNG. PAS, STRUNG. C sau STRUNG. CPP.

    6

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    7/50

    Rezolvare

    Vom calcula timpul Q  prin simularea procesului de funcţionare independentă  a celordouă strunguri. Pentru aceasta introducem în studiu următoarele variabile:

    t  − momentele de timp în care cel puţin unul din strunguri devine liber. Iniţial 0=t  .

     s1  ( s2) − timpul necesar strungului 1 (strungului 2) pentru a termina prelucrarea pieseicurente. Iniţial .0,0 21   ==  s s

     j − numărul piesei de la ieşirea benzii rulante. Iniţial 1= j .

    Evident, strungul k , , este liber numai atunci cînd . Procesele de

    alimentarea a acestui strung se simulează prin atribuirile:

    }2,1{∈k  0=k  s

     jk  d  s   =: ; 1:   +=  j j .

    Momentele de timp t  în care cel puţin unul din strunguri devine liber se calculează cuajutorul formulei recurente:

    min:  st t   +=

    , unde ),min( 21min  s s s  =

    .Începînd cu momentul t , timpul necesar pentru a termina prelucr ările pieselor curente se

    calculează ca:

    min11 :  s s s   −= ;

    min22 :  s s s   −= .

    Procesul de calcul continuă pînă cînd va fi încărcată ultima piesă de pe banda rulantă sau, prin alte cuvinte, cînd  j  devine mai mare ca n. Evident, începînd cu acest moment detimp, vor mai fi necesare încă  secunde pentru ca strungurile să  termine prelucrarea

     pieselor deja încărcate. Prin urmare,max s

    max:  st Q   += , unde ),max( 21max  s s s   = .

    În programul ce urmează simularea procesului de funcţionare a strungurilor este realizatcu ajutorul procedurii Si mul are.

    Program   St r ungur i ;{ Cl asel e 7- 9 }const  nmax=1000;var  n : i nt eger ;

    D : array[ 1. . nmax] of  i nt eger ;

    Q : i nt eger ;I nt r are, I esi re : text ;

     procedure  Ci t i r e;{ Ci t i r ea dat el or di n f i s i er ul de i nt r ar e }var  i : i nteger ;

     begin assi gn( I nt r ar e, ' STRUNG. I N' ) ;reset ( I nt rare) ;r eadl n( I nt r ar e, n) ;for  i : =1 to  n do 

    readl n( I nt rare, D[ i ] ) ;cl ose( I nt rare) ;

    end ; { Ci t i r e }

    7

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    8/50

     procedure  Scr i e;{ Scri er ea dat el or i n f i s i er ul de i esi r e }

     begin assi gn( I esi r e, ' STRUNG. OUT' ) ;rewr i te( I esi re) ;wr i t el n( I es i re, Q) ;

    cl ose( I esi re) ;end ; { Scr i e }

     procedure  Si mul ar e;{ Si mul ar ea pr el ucrar i l or }label  1;var , j , s1, s2, smi n, smax : i nt eger ;t

     begin t : =0;

     j : =1;s1: =0; s2: =0;repeat 

    { Al i ment ar ea st r ungur i l or l i ber e }if  s1=0 then  begin 

    s1: =D[ j ] ; j : =j +1;if  j >n then  goto  1;

    end ;if  s2=0 then  begin 

    s2: =D[ j ] ; j : =j +1;if  j >n then  goto  1;

    end ;{ Cal cul area moment ul ui de t i mp t }if  s1s2 then  smax: =s1 else  smax: =s2;Q: =t +smax;

    end ; { Si mul are }

     begin Ci t i r e;Si mul ar e;Scr i e;end .

    Din analiza textului procedurii Si mul are se observă că timpul Q se calculează printr-osingur ă  parcurgere a tabloului  D. Prin urmare, numărul necesar de operaţii este de ordinulO(n), iar timpul de execuţie va fi cu mult mai mic decît o secundă.

    8

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    9/50

    Unitaţi

    Se consider ă  mulţimea tuturor şirurilor binare de lungimea n. Aceste şiruri pot fireprezentate în forma:

     Pozi ţ ia 1 2 3 … n-2 n-1 n

    Ş irul binar  x1  x2  x3 …  xn-2  xn-1  xn unde . Scrieţi un program care calculează numărul k  de şiruri de lungimea

    n în care unităţile nu apar pe poziţii vecine.

    }1,0{...,,, 21   ∈n x x x

    De exemplu, mulţimea tuturor şirurilor binare de lungimea n = 3 este:

    {000, 001, 010, 011, 100, 101, 110, 111}.

    Se observă, că unităţile nu apar pe poziţii vecine numai în şirurile {000, 001, 010, 100, 101}.Prin urmare k  = 5.

    Date de intrare. Fişierul text UNI TATI . I N conţine pe o singur ă linie numărul naturaln.

    Date de ieşire. Fişierul text UNI TATI . OUT  va conţine pe o singur ă  linie numărulnatural k .

    Exemplu.

    UNI TATI . I N UNI TATI . OUT3 5

    Restricţii. 403   ≤≤ n . Timpul de execuţie nu va depăşi 1 secundă. Fişierul sursă  va

    avea denumirea UNI TATI . PAS, UNI TATI . C sau UNI TATI . CPP.

    9

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    10/50

    Rezolvare

    Fie numărul de şiruri binare de lungimea i  în care unităţile nu apar pe poziţiivecine. Prin calcule directe ne putem convinge că 

    )(i f 

    2)1(   = f  , 3)2(   = f   şi .5)3(   = f Vom diviza mulţimea tuturor şirurilor binare de lungimea i  în două  submulţimi:  A  -

    submulţimea şirurilor ce au în ultima poziţie cifra binara 0 şi B - submulţimea şirurilor ce au

    în ultima poziţie cifra binara 1.În cazul submulţimii A şirurile respective pot fi reprezentate în forma:

     Pozi ţ ia 1 2 3 … i-2 i-1 i

    Ş irul binar  x1  x2  x3 …  xi-2  xi-1 0

    Evident, numărul de şiruri din mulţimea  A  ce corespund enunţului problemei este egal cu.)1(   −i f 

    În cazul submulţimii B şirurile respective pot fi reprezentate în forma:

     Pozi ţ ia 1 2 3 … i-2 i-1 i

    Ş irul binar  x1  x2  x3 …  xi-2  xi-1 1

    Evedent, condiţiilor problemei corespund numai şirurile în care pe poziţia i-1 se află  cifrazero:

     Pozi ţ ia 1 2 3 … i-2 i-1 i

    Ş irul binar  x1  x2  x3 …  xi-2 0 1

    iar numărul acestor şiruri este egal cu )2(   −i f  .Prin urmare,

    )1()2()(   −+−= i f i f i f  .

    În programul ce urmează numerele , , , ..., , ..., sînt calculate prin metoda iteraţiilor:

    )3( f  )4( f  )5( f  )(i f  )(n f 

     2)1(   = f  ;

    3)2(  =

     f  ; 532)2()1()3(   =+=+=  f  f  f  ;;853)3()2()4(   =+=+=  f  f  f   ;1385)4()3()5(   =+=+=  f  f  f   

    ...

    )1()2()(   −+−= i f i f i f  ;...

    )1()2()(   −+−= n f n f n f  .

    Menţionăm, că şirul de numere 2, 3, 5, 8, 13, ..., în care numărul curent este egal

    cu suma celor două  numere precedente

    )(i f 

    )2(   −i f    şi )1(   −i f  este cunoscut în literatura despecialitate sub numele  şirul lui Fibonacci.

    10

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    11/50

     

    Program   Uni tat i ;{ Cl asel e 7- 9 }var  n, i : i nteger ;

    f i , f i 1, f i 2 : l ongi nt ;{ f i – numar ul cur ent di n si r ul Fi bonacci }

    { f i 1, f i 2 – numer el e pr ecedent e di n si r }I nt r are, I esi re : text ; begin

    assi gn( I nt r ar e, ' UNI TATI . I N' ) ;reset ( I nt rare) ;r eadl n( I nt r ar e, n) ;cl ose( I nt rare) ;f i 1: =2;f i 2: =3;for  i : =3 to  n do begin

    f i : =f i 1+f i 2;

    f i 1: =f i 2;f i 2: =f i ;end ;

    assi gn( I esi r e, ' UNI TATI . OUT' ) ;rewr i te( I esi re) ;wr i t el n( I esi r e, f i ) ;cl ose( I esi re) ;

    end .

    Din analiza textului programului se observa ca instrucţiunile din corpul ciclului vor fiexecutate de ori. Prin urmare, timpul de execuţie a programului va fi cu mult mai mic

    decît o secundă.

    )2(   −n

      11

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    12/50

    Ziua 1

    Clasele 10 – 12

    12

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    13/50

    Dreptunghiuri

    Se consider ă n dreptunghiuri D1, D2, ..., Di, ...,  Dn care au laturile paralele cu axele decoordonate, iar coordonatele vîrfurilor sînt numere naturale. Fiecare dreptunghi  Di,

    , este definit prin tuplul , unde ani ...,,3,2,1= ),,,( iiii d cba i, bi  sînt coordonatele colţului

    stînga-jos, iar ci, d i − coordonatele colţului dreapta-sus ( fig. 1).

    Elaboraţi un program care determină  aria S   a figurii obţinute prin reuniunea celor n dreptunghiuri.

     Fig. 1

    Date de intrare. Fişierul text DREPT. I N  conţine pe prima linie numărul natural n.Fiecare din următoarele n  linii ale fişierului de intrare conţine cîte patru numere naturaleseparate prin spaţiu. Linia a fişierului de intrare conţine numerele naturale a1+i i, bi, ci, d i.

    Date de ieşire. Fişierul text DREPT. OUT  va conţine pe o singur ă  linie numărulnatural S .

    Exemplu.

    DREPT. I N DREPT. OUT182

    1 1 5 5

    4 3 7 4

    Restricţii. 00010,,,0   ≤≤ iiii d cba , ni ...,,3,2,1= ; 1001   ≤≤ n . Timpul de execuţie

    nu va depăşi o secundă. Fişierul sursă  va avea denumirea DREPT. PAS, DREPT. C  sauDREPT. CPP.

    13

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    14/50

    Rezolvare

    Conform restricţiilor din enunţul problemei, toate dreptunghiurile  D1, D2, ..., Dn se află în interiorul dreptunghiului (0, 0, 10000, 10000). Întrucît coordonatele vîrfurilor acestordreptunghiuri sînt numere naturale, putem introduce în studiu un rastru ( fig. 2), liniile căruiaformează microzonele:

    (0, 0, 1, 1); (1, 0, 2, 1), ..., )1,1,,(   ++ k  jk  j , ..., (9999, 9999, 10000, 10000).

     Fig. 2

    Din fig. 2 se observă, că aria figurii formate prin reuniunea dreptunghiurilor D1, D2, ..., Dn poate fi calculată prin verificarea apartenenţei fiecăreia din microzonele )1,1,,(   ++ k  jk  j  la cel puţin unul din dreptunghiurile în studiu. Evident, microzona apar ţine

    dreptunghiului atunci şi numai atunci cînd se respectă următoarele condiţii:

    )1,1,,(   ++ k  jk  j

    ),,,( iiii d cba

    ia j  ≥ ; ic j   ≤+1 ; ;ibk   ≥ id k    ≤+1 .

    Complexitatea temporală  a unui astfel de algoritm este de ordinul, mărime care depăşeşte capacitatea de prelucrare a calculatoarelor

    din laboratorul de informatică.

    10101000001000010   =××

    Pentru a micşora numărul microzonelor examinate, vom utiliza în loc de rastrultradiţional, un rastru neuniform, liniile orizontale şi verticale ale căruia reprezintă prelungirilelaturilor respective ale dreptunghiurilor  D1,  D2, ...,  Dn  ( fig. 3). În memoria calculatorului unastfel de rastru poate fi reprezentat cu ajutorul mulţimilor:

    },{...},{},{ 2211 nn cacaca X    ∪∪∪= ;

    },{...},{},{ 2211 nn d bd bd bY    ∪∪∪= .

    Pentru a simplifica procesul de triere a microzonelor, vom sorta aceste mulţimi în ordinecrescătoare.

    14

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    15/50

     

     Fig. 3

    Din  fig. 3  se observă  că  microzonele ş.a.m.d. ale rastrului reprezintă, în

    general, dreptunghiuri de dimensiuni ce difer ă, iar aria S   poate fi calculată  însumîn ariilemicrozonelor ce apar ţin la cel puţin unul din dreptunghiurile D

    321 ,,  z z z

    1, D2, ..., Dn.Fiecare microzonă  z poate fi identificată  într-un mod univoc cu ajutorul unui tuplului

    , unde , sînt coordonatele colţului stînga-jos, iar − coordonatele

    colţului dreapta-sus. Evident, microzona apar ţine dreptunghiului

    atunci şi numai atunci cînd se respectă următoarele condiţii:

    ),,,(  z z z z ml k  j  z z k  j ,  z z ml  ,

    ),,,(  z z z z ml k  j

    ),,,( iiii d cba

    i z a j   ≥ ; i z cl    ≤ ; ;i z bk    ≥ i z d m   ≤ .

    În programul ce urmează apartenenţa microzonei la cel puţin unul din

    dreptunghiurile D

    ),,,(  z z z z ml k  j

    1, D2, ..., Dn se verifică cu ajutorul funcţiei Apar t i ne.

    Program   Dr ept unghi ur i ;{ Cl asel e 10- 12 }var  n : l ongi nt ;

    A, B, C, D : array[ 1. . 100] of  l ongi nt ;S : l ongi nt ;I nt r are, I esi re : text ;{ X - abci sel e r ast r ul ui }X : array[ 1. . 200] of  l ongi nt ;nx : l ongi nt ;{ Y - or donat el e r ast r ul ui }

     Y : array[ 1. . 200] of  l ongi nt ;ny : l ongi nt ;

     procedure  Ci t i r e;{ Ci t i r ea dat el or di n f i s i er ul de i nt r ar e }var  i : l ongi nt ;

     begin assi gn( I nt r ar e, ' DREPT. I N' ) ;reset ( I nt rare) ;

    15

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    16/50

      r eadl n( I nt r ar e, n) ;for  i : =1 to  n do 

    r eadl n( I nt r are, A[ i ] , B[ i ] , C[ i ] , D[ i ] ) ;cl ose( I nt rare) ;

    end ; { Ci t i r e }

     procedure  Scr i e;{ Scri er ea dat el or i n f i s i er ul de i esi r e } begin 

    assi gn( I esi r e, ' DREPT. OUT' ) ;rewr i te( I esi re) ;wr i t el n( I esi re, S) ;cl ose( I esi re) ;

    end ; { Scr i e }

    function  Apart i ne( j , k, l , m : l ongi nt ) : bool ean;{ Ver i f i ca apar t enent a mi crozonei ( j , k, l , m) }{ l a cel put i n unul di n dr ept unghi ur i l e D[ 1] . . D[ n] }

    var  i : l ongi nt ;q : bool ean; { i ndi cat or "apar t i ne" } begin 

    q: =f al se;for  i : =1 to  n do if >=A[ i ] ) and   ( l =B[ i ] ) and   ( mX[ t +1] then  begin  p: =X[ t ] ; X[ t ] : =X[ t +1] ; X[ t +1] : =p; end ;

    16

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    17/50

    end ; { Abci sel e }

     procedure  Or donat el e;{ Ret ur neaza i n vect or ul Y or donat el e r ast r ul ui }var  i , t , p : l ongi nt ;

    q : bool ean; { i ndi cat or "or donat a se r epet a" }

     begin { Copi em i n vect or ul Y or donat el e B[ i ] }ny: =0;for  i : =1 to  n do  begin 

    q: =f al se;for t : =1 to  ny do if  B[ i ] =Y[ t ] then  q: =t r ue;

    if  ( not  q) then  begin  ny: =ny+1; Y[ ny] : =B[ i ] ; end ;

    end ;{ Copi em i n vect or ul Y or donat el e D[ i ] }

    for  i : =1 to  n do  begin q: =f al se;for  t : =1 to  ny do if  D[ i ] =Y[ t ] then  q: =t r ue;

    if not  q) then (   begin  ny: =ny+1; Y[ ny] : =D[ i ] ; end ;

    end ;{ Sort am el ement el e vect or ul ui Y }for  i : =1 to  ny do for  t : =1 to  ny- 1 do if  Y[ t ] >Y[ t +1] then 

     begin  p: =Y[ t ] ; Y[ t ] : =Y[ t +1] ; Y[ t +1] : =p; end ;end ; { Or donatel e }

     procedure  Ar i a;{ Cal cul eaza ar i a S }var  p, t : l ongi nt ;

     begin Abci sel e;Or donat el e;S: =0;for  p: =1 to  nx- 1 do for  t : =1 to  ny- 1 do 

    if  Apar t i ne( X[ p] , Y[ t ] , X[ p+1] , Y[ t +1] )then  S: =S+( X[ p+1] - X[ p] ) *( Y[ t +1] - Y[ t ] ) ;

    end ; { Ar i a }

     begin Ci t i r e;Ar i a;Scr i e;

    end .

    Întrucît mulţimile  X  şi Y  conţin cîte cel mult elemente, complexitatea temporală a

     procedurilor Abci sel e  şi Or donat el e  este . Complexitatea temporală  a funcţieiApar t i ne  este , iar a procedurii Ar i a  −  ) . Conform restricţiilor din enunţul

    n2

    )( 2nO)(nO ( 3nO

      17

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    18/50

     problemei, . Prin urmare, numărul necesar de operaţii este de ordinul , mărimecomparabilă cu capacitatea de prelucrare a calculatoarelor din laboratorul de informatică.

    100≤n 610

      18

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    19/50

    Strunguri

    Se consider ă  m  strunguri identice destinate prelucr ării automate a unor piese.Strungurile funcţionează  independent unul de altul. În procesul prelucr ării piesele sîntavansate către strunguri cu ajutorul unei benzi rulante (vezi fig. 1).

    Strungul 1

    Strungul 2

    . ....

    123n

    Strungul m

     . 

     . 

     . 

     

     Fig. 1

    Piesele de prelucrat sînt numerotate în ordinea apariţiei lor pe bandă  prin numerelenaturale 1, 2, 3, ..., n. Pentru fiecare piesă i se cunoaşte timpul d i necesar pentru prelucrarea ei

     pe unul din cele m strunguri.Elaboraţi un program care calculează timpul Q necesar pentru a prelucra toate piesele.

    Date de intrare. Fişierul text STRUNG. I N conţine pe prima linie numerele naturale m şi n, separate prin spaţiu. Fiecare din următoarele n linii ale fişierului de intrare conţine cîte unnumăr natural. Linia a fişierului de intrare conţine numărul natural d 1+i i − timpul necesar

     pentru prelucrarea piesei i pe unul din cele m strunguri.

    Date de ieşire. Fişierul text STRUNG. OUT va conţine pe o singur ă linie numărul naturalQ − timpul necesar pentru a prelucra toate piesele.

    Exemplu.

    STRUNG. I N STRUNG. OUT163 10

    123975

    2346

    Restricţii. 1002   ≤≤ m ; 10001   ≤≤ n ; 301   ≤≤ id  , ni ...,,3,2,1= . Timpul de execuţie

    nu va depăşi o secundă. Fişierul sursă  va avea denumirea STRUNG. PAS, STRUNG. C  sauSTRUNG. CPP.

    19

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    20/50

    Rezolvare

    Vom calcula timpul Q prin simularea procesului de funcţionare independentă a celor m strunguri. Pentru aceasta introducem în studiu următoarele variabile:

    t  − momentele de timp în care cel puţin unul din strunguri devine liber. Iniţial 0=t  .

     sk   −  timpul necesar strungului k   )...,,2,1( mk   =   pentru a termina prelucrarea piesei

    curente. Iniţial .0=k  s

     j − numărul piesei de la ieşirea benzii rulante. Iniţial 1= j .

    Evident, strungul k , , este liber numai atunci cînd . Procesele de

    alimentarea a acestui strung se simulează prin atribuirile:

    }...,,2,1{ mk  ∈ 0=k  s

     jk  d  s   =: ; 1:   +=  j j .

    Momentele de timp t  în care cel puţin unul din strunguri devine liber se calculează cuajutorul formulei recurente:

    min:  st t    += , unde )...,,,min( 21min m s s s s   = .Începînd cu momentul t , timpul necesar pentru a termina prelucr ările pieselor curente se

    calculează ca:

    min:  s s s k k    −= , mk  ...,,2,1= .

    Procesul de calcul continuă pînă cînd va fi încărcată ultima piesă de pe banda rulantă sau, prin alte cuvinte, cînd  j  devine mai mare ca n. Evident, începînd cu acest moment detimp, vor mai fi necesare încă  secunde pentru ca strungurile să  termine prelucrarea

     pieselor deja încărcate. Prin urmare,max s

    max:  st Q   += , unde )...,,,max( 21max k  s s s s   = .În programul ce urmează simularea procesului de funcţionare a strungurilor este realizat

    cu ajutorul procedurii Si mul are.

    Program   St r ungur i ;{ Cl asel e 7- 9 }const  mmax=100;

    nmax=1000;var  m, n : i nt eger ;

    D : array[ 1. . nmax] of  i nt eger ;

    S : array[ 1. . mmax] of  i nt eger ;Q : i nt eger ;I nt r are, I esi re : text ;

     procedure  Ci t i r e;{ Ci t i r ea dat el or di n f i s i er ul de i nt r ar e }var  i : i nteger ;

     begin assi gn( I nt r ar e, ' STRUNG. I N' ) ;reset ( I nt rare) ;r eadl n( I nt r ar e, m, n) ;for  i : =1 to  n do 

    readl n( I nt rare, D[ i ] ) ;cl ose( I nt rare) ;

    end ; { Ci t i r e }

    20

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    21/50

      procedure  Scr i e;

    { Scri er ea dat el or i n f i s i er ul de i esi r e } begin 

    assi gn( I esi r e, ' STRUNG. OUT' ) ;rewr i te( I esi re) ;

    wr i t el n( I es i re, Q) ;cl ose( I esi re) ;end ; { Scr i e }

    function  El ement ul Mi ni mal : i nt eger ;{ Retur neaza el ement ul mi ni mal di n tabl oul S }var , k : i nt eger ;a

     begin a: =S[ 1] ;for  k: =1 to  m do if  S[k] b then  b: =S[ k];

    El ement ul Maxi mal : =b;end ; { El ement ul Maxi mal }

     procedure  Si mul ar e;{ Si mul ar ea pr el ucrar i l or }label  1;var  t , j , k, smi n, smax : i nt eger ;

     begin t : =0;

     j : =1;for  k: =1 to  m do 

    S[ k]: =0;repeat 

    { Al i ment ar ea st r ungur i l or l i ber e }for  k: =1 to  m do 

    if  S[ k] =0 then  begin 

    S[ k] : =D[ j ] ; j : =j +1;if  j >n then  goto  1;

    end ;{ Cal cul area moment ul ui de t i mp t }smi n: = El ement ul Mi ni mal ;t : =t +smi n;{ Cal cul ar ea dur at el or s1, s2 }

    for  k: =1 to  m do S[ k]: =S[ k]- smi n;

    until  f al se;1:

    21

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    22/50

      smax: = El ement ul Maxi mal ;Q: =t +smax;

    end ; { Si mul are }

     begin Ci t i r e;

    Si mul ar e;Scr i e;end .

    Din analiza textului procedurii Si mul are se observă că timpul Q se calculează printr-osingur ă  parcurgere a tabloului  D, iar determinarea elementului minimal şi a elementuluimaximal necesită o singur ă parcurgere a tabloului S. Prin urmare, numărul necesar de operaţiieste de ordinul O(nm), iar timpul de execuţie va fi cu mult mai mic decît o secundă.

    22

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    23/50

    Unitaţi

    Se consider ă  mulţimea tuturor şirurilor binare de lungimea n. Aceste şiruri pot fireprezentate în forma:

     Pozi ţ ia 1 2 3 … n-2 n-1 n

    Ş irul binar  x1  x2  x3 …  xn-2  xn-1  xn unde . Scrieţi un program care calculează numărul k  de şiruri de lungimea n în careunităţile nu apar pe poziţii vecine.

    }1,0{∈ x

    De exemplu, mulţimea tuturor şirurilor binare de lungimea n = 3 este:

    {000, 001, 010, 011, 100, 101, 110, 111}.

    Se observă, că unităţile nu apar pe poziţii vecine numai în şirurile {000, 001, 010, 100, 101}.Prin urmare k  = 5.

    Date de intrare. Fişierul text UNI TATI . I N  conţine pe o singur ă  linie numărulnatural n.

    Date de ieşire. Fişierul text UNI TATI . OUT  va conţine pe o singur ă  linie numărulnatural k .

    Exemplu.

    UNI TATI . I N UNI TATI . OUT3 5

    Restricţii. 1003   ≤≤ n . Timpul de execuţie nu va depăşi o secundă. Fişierul sursă  va

    avea denumirea UNI TATI . PAS, UNI TATI . C sau UNI TATI . CPP.

    23

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    24/50

    Rezolvare

    Fie numărul de şiruri binare de lungimea i  în care unităţile nu apar pe poziţiivecine. Prin calcule directe ne putem convinge că 

    )(i f 

    2)1(   = f  , 3)2(   = f   şi .5)3(   = f Vom diviza mulţimea tuturor şirurilor binare de lungimea i  în două  submulţimi:  A  -

    submulţimea şirurilor ce au în ultima poziţie cifra binara 0 şi B - submulţimea şirurilor ce au

    în ultima poziţie cifra binara 1.În cazul submulţimii A şirurile respective pot fi reprezentate în forma:

     Pozi ţ ia 1 2 3 … i-2 i-1 i

    Ş irul binar  x1  x2  x3 …  xi-2  xi-1 0

    Evident, numărul de şiruri din mulţimea  A  ce corespund enunţului problemei este egal cu.)1(   −i f 

    În cazul submulţimii B şirurile respective pot fi reprezentate în forma:

     Pozi ţ ia 1 2 3 … i-2 i-1 i

    Ş irul binar  x1  x2  x3 …  xi-2  xi-1 1

    Evedent, condiţiilor problemei corespund numai şirurile în care pe poziţia i-1 se află  cifrazero:

     Pozi ţ ia 1 2 3 … i-2 i-1 i

    Ş irul binar  x1  x2  x3 …  xi-2 0 1

    iar numărul acestor şiruri este egal cu )2(   −i f  .Prin urmare,

    )1()2()(   −+−= i f i f i f  .

    În programul ce urmează numerele , , , ..., , ..., sînt calculate prin metoda iteraţiilor:

    )3( f  )4( f  )5( f  )(i f  )(n f 

     2)1(   = f  ;

    3)2(  =

     f  ; 532)2()1()3(   =+=+=  f  f  f  ;;853)3()2()4(   =+=+=  f  f  f   ;1385)4()3()5(   =+=+=  f  f  f   

    ...

    )1()2()(   −+−= i f i f i f  ;...

    )1()2()(   −+−= n f n f n f  .

    Menţionăm, că şirul de numere 2, 3, 5, 8, 13, ..., în care numărul curent este egal

    cu suma celor două  numere precedente

    )(i f 

    )2(   −i f    şi )1(   −i f  este cunoscut în literatura despecialitate sub numele  şirul lui Fibonacci.

    24

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    25/50

     

    Program   Uni tat i ;{ Cl asel e 10- 12 }{ Er or i de depasi r e pent r u n >= 45 }var  n, i : i nteger ;

    f i , f i 1, f i 2 : l ongi nt ;

    { f i – numar ul cur ent di n si r ul Fi bonacci }{ f i 1, f i 2 – numer el e pr ecedent e di n si r }I nt r are, I esi re : text ;

     begin

    assi gn( I nt r ar e, ' UNI TATI . I N' ) ;reset ( I nt rare) ;r eadl n( I nt r ar e, n) ;cl ose( I nt rare) ;f i 1: =2;f i 2: =3;for  i : =3 to  n do begin

    f i : =f i 1+f i 2;f i 1: =f i 2;f i 2: =f i ;

    end ;assi gn( I esi r e, ' UNI TATI . OUT' ) ;rewr i te( I esi re) ;wr i t el n( I esi r e, f i ) ;cl ose( I esi re) ;

    end .

    Întrucît complexitatea temporală a programului în studiu este de ordinul n, iar 100≤n ,

    timpul de execuţie va fi mai mic decît o secundă.În procesul depanării programului se observă  că  în cazul variabilelor f i , f i 1 şi f i 2, pentru valori , apar erori de depăşire. Aceste erori pot fi evitate prin reprezentareanumerelor foarte mari cu ajutorul unor structuri de date mai complexe şi elaborareasubprogramelor ce simulează adunarea numerelor respective. Una din soluţiile posibile constă în reprezentarea numerelor foarte mari prin tablouri, fiecare element al tabloului reprezentîndcîte o cifr ă. În acestă reprezentare, operaţiea de adunare a numerelor foarte mari se reduce laadunarea cifrelor respective şi calcularea transportului.

    45≥n

     

    Program   Uni tat i ;{Cl asel e 10- 12}var

    {Pent r u model ear ea adunar i i numer el or i nt r egi f oar t e mar i vor f if ol osi t e t abl our i l e A, B, C}A, B, C : ar r ay [ 1. . 1000] of i nt eger ;n, i , j , t , ka, kb, kc: i nteger ;I nt r are, I esi re: text ;

     begin

    assi gn( I nt r ar e, ' UNI TATI . I N' ) ;reset ( I nt rare) ;r ead( I nt r ar e, n) ;cl ose( I nt rare) ;assi gn( I esi r e, ' UNI TATI . OUT' ) ;

    rewr i te( I esi re) ;ka: =1; A[ 1] : =2; kb: =1; b[ 1] : =3;for  i : =3 to  n do 

    25

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    26/50

       begin  {Model ar ea sumel or pent r u numer e mar i }t : =0;for  j : =1 to  ka do  begin

    t : =t +A[ j ] +B[ j ] ;C[ j ] : = t mod 10;

    t : =t di v 10;end ;for  j : =ka+1 to  kb do  begin

    t : =t +B[ j ] ;C[ j ] : =t mod 10;t : =t di v 10;end ;

    c: =kbk ;if  t >0 then  begin  kc: =kc+1; C[ kc] : =t ; end ;ka: =kb; A: =B; {f i 1: =f i 2}kb: =kc; B: =C; {f i 2: =f i }

    end ;for  i : =kc downto  1 do  wr i t e( I esi re, C[ i ] ) ;cl ose( I esi re) ;

    end .

    26

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    27/50

    Ziua 2

    Clasele 7 – 9

    27

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    28/50

    Depozitul

    Pentru păstrarea în siguranţă  a unor cantităţi mari de substanţe radioactive, într-o regiuneîndepărtată  a fost construit un depozit subteran. Depozitul este format dintr-o reţea de tuneluri laintersecţia cărora se află zone de depozitare. Orice zonă de depozitare poate fi liber ă sau ocupată decontainere cu substanţe radioactive. Tunelurile depozitului formează  un caroiaj, iar distanţa dintreoricare două zone vecine este egală cu 1 (vezi fig. 1).

     Fig. 1

    Tunelurile care merg în direcţia est-vest sînt numerotate prin 1, 2, 3, ..., m, iar cele în direcţianord-sud prin 1, 2, 3, ..., n. Fiecare zonă de depozitare se identifică printr-o adresă unică de forma (i,

     j), unde i  este numărul tunelului est-vest, iar  j  al celui nord-sud, la intersecţia cărora se află  zonarespectivă.

    Prin coridoare şi prin zonele de depozitare se deplasează un robot. Robotul poate trece printr-ozonă  de depozitare numai atunci cînd ea este liber ă. Se consider ă  că  indiferent de zona de plecare,robotul poate ajunge în oricare altă zonă liber ă a depozitului.

    Elaboraţi un program care cunoscînd adresele zonelor ocupate, calculează  lungimea  L  a celuimai scurt drum ce trebuie parcurs de robot pentru a ajunge din zona ( a, b) în zona (c, d ). Distanţele

     parcurse de robot în interiorul zonelor de depozitare nu vor fi luate în consideraţie.Date de intrare. Fişierul text DEPOZI T. I N  conţine pe prima linie numerele naturale m, n 

    separate prin spaţiu. Linia a doua a fişierului de intrare conţine numerele naturale a, b − adresa zoneide plecare, iar linia a treia numerele naturale c, d  − adresa zonei de sosire. Linia a patra a fişierului deintrare conţine numărul natural k  − numărul zonelor ocupate de containerele cu substanţe radioactive.Următoarele k   linii ale fişierului de intrare conţin cîte două numere naturale i,  j −  adresele zonelorocupate.

    Date de ieşire. Fişierul text DEPOZI T. OUT va conţine pe o singur ă linie numărul natural L.

    Exemplu.

    DEPOZI T. I N DEPOZI T. OUT

    44 52 23 571 31 41 52 53 23 34 5

    Restricţii. ;100,1   ≤≤ nm mca   ≤≤ ,1 ; nd b   ≤≤ ,1 ; 00011   ≤≤ k  . Timpul de execuţie nuva depăşi 2 secunde. Fişierul sursă  va avea denumirea DEPOZI T. PAS, DEPOZI T. C  sauDEPOZI T. CPP.

    28

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    29/50

    Rezolvare

    Pentru a determina lungimea celui mai scurt drum vom folosi metoda propagării undeinumerice, cunoscută  în literatura de specialitate ca algoritmul lui  Lee. Introducem în studiu

    tabloul ij z Z   = , unde zij reprezintă  lungimea celui mai scurt drum de la zona (a, b) la zona

    (i, j). Iniţial zonele libere vor fi marcate în tabloul Z  printr-o valoare negativă, de exemplu −1,iar zonele ocupate prin altă valoare negativă, de exemplu, − 2 (vezi fig. 2). Evident, zab = 0.

    Tabloul ini ţ ial 

    1 2

    1

    3

    3

    2

    4   5

    4

    −1

    −2−1   −1

    −1 −1 −1

    −2 −2

    −2

    −2   −2

    −2

    −1 −1

    −1 −1 −1 −1

    0

     L=0

    1 2

    1

    3

    3

    2

    4   5

    4

    −1

    −2−1   1

    1 1 −1

    −2 −2

    −2

    −2   −2

    −2

    −1 −1

    −1 −1 −1 −1

    0

     L=1

    1 2

    1

    3

    3

    2

    4   5

    4

    −21

    1 1

    −2 −2

    −2

    −2   −2

    −2

    −1 −1

    −1 −1 −1 −1

    0   2

    2

    2

     L=2

    1 2

    1

    3

    3

    2

    4   5

    4

    −21

    1 1

    −2 −2

    −2

    −2   −2

    −2

    −1

    −1 −1 −1

    0   2

    2

    2

    3

    3

     L=3

    1 2

    1

    3

    3

    2

    4   5

    4

    −21

    1 1

    −2 −2

    −2

    −2   −2

    −2−1

    0   2

    2

    2

    3

    3

    4   4

    4

     

     Fig. 2

    În continuare propagăm prin zonele depozitului o undă  numerică   L, unde  L  iaconsecutiv valorile 0, 1, 2, 3 ş.a.m.d. Pentru aceasta parcurgem iterativ tabloul  Z  şi atribuimvaloarea  L+1 elementelor ce corespund zonelor libere, vecine cu zona în care a ajuns undanumerică  L. Procesul iterativ se termină în momentul cînd unda numerică ajunge în celula (c,d ).

    În programul ce urmează  valorile iniţiale ale tabloului  Z   sînt stabilite cu ajutorul procedurii I ni t i al i zar e. Pentru a simplifica analiza zonelor de la marginile depozitului,

    în tabloul  Z  au fost incluse liniile 0, m+1 şi coloanele 0, n+1 care formează un chenar, iarelementelor respective li se atribuie valloarea − 2 (zone ocupate). Unda numerică se propagă cu ajutorul procedurii UndaNumer i ca, iar lungimea celui mai scurt drum se scrie în fişierulde ieşire cu ajutorul procedurii Scr i e.

    Program   Depozi t ul ;{Cl asel e 7- 9 }const  mmax=100; nmax=100;

    ocupat a=- 2; l i ber a=- 1;var  m, n, a, b, c, d : i nt eger ;

    L : i nt eger ;

    Z : array[ 0. . mmax+1, 0. . nmax+1] of  i nt eger ;I nt r are, I esi re : text ;

    29

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    30/50

    Procedure  I ni t i al i zar e;{ I ni t i al i zar ea t abl oul ui Z }var  i , j : i nt eger ;

     begin for  i : =1 to  m do for  j : =1 to  n do  Z[ i , j ] : =l i bera;

    for  i : =0 to  m+1 do  begin Z[ i , 0] : =ocupat a;Z[ i , n+1] : =ocupat a;

    end ;for  j : =0 to  n+1 do  begin 

    Z[ 0, j ] : =ocupat a;Z[ m+1, j ] : =ocupata;

    end ;end ; { I ni t i al i zare }

    Procedure  Ci t i r e;{ Ci t i r ea dat el or di n f i s i er ul de i nt r ar e }var  i , j , k, q : i nt eger ;

     begin assi gn( I nt r ar e, ' DEPOZI T. I N' ) ;reset ( I nt rare) ;r eadl n( I nt r ar e, m, n) ;r eadl n( I nt r ar e, a, b) ;r eadl n( I nt r ar e, c, d) ;I ni t i al i zar e;r eadl n( I nt r ar e, k) ;

    for  q: =1 to  k do 

     begin r eadl n( I nt r are, i , j ) ;Z[ i , j ] : =ocupat a;

    end ;cl ose( I nt rare) ;

    end ; { Ci t i r e }

    Procedure  Scr i e;{ Scri er ea dat el or i n f i s i er ul de i esi r e }

     begin assi gn( I esi r e, ' DEPOZI T. OUT' ) ;rewr i te( I esi re) ;

    wr i t el n( I esi re, L) ;cl ose( I esi re) ;

    end ; { Scr i e }

    Procedure  UndaNumer i ca;{ Propagarea undei numer i ce }var  i , j : i nt eger ;

     begin Z[ a, b] : =0;L: =0;while  Z[ c, d] =l i ber a do  begin 

    for  i : =1 to  m do for  j : =1 to  n do if  Z[ i , j ] =L then 

    30

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    31/50

       begin i f Z[ i - 1, j ] =l i ber a t hen Z[ i - 1, j ] : =L+1;i f Z[ i , j - 1] =l i ber a t hen Z[ i , j - 1] : =L+1;i f Z[ i +1, j ] =l i ber a t hen Z[ i +1, j ] : =L+1;i f Z[ i , j +1] =l i ber a t hen Z[ i , j +1] : =L+1;

    end ; { t hen }

    L: =L+1;end ; { whi l e }end ; { UndaNumer i ca }

     begin Ci t i r e;UndaNumer i ca;Scr i e;

    end .

    Din analiza textului procedurii UndaNumer i ca  se observă  că  instrucţiunea if  dincomponenţa ciclurilor imbricate for va fi executată de mn ori. Corpul ciclului while va fiexecutat de cel mult L ori, unde L este lungimea celui mai scurt drum din zona (a, b) în zona(c, d ). Evident, lungimea acestui drum nu poate depăşi lungimea totală  a tunelurilordepozitului, deci mn L  < . Prin urmare, în cel mai nefavorabil caz, numărul de execuţii aleinstrucţiunii if va fi de ordinul m2n2.

    Conform restricţiilor din enunţul problemei, 100,   ≤nm . Prin urmare, numărul necesarde operaţii este de ordinul 108, mărime comparabilă  cu capacitatea de prelucrare acalculatoarelor personale.

    31

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    32/50

    Ghiceşte numărul

    Se consider ă  următorul joc. Primul jucător este calculatorul, iar al doilea jucător eştichiar tu. Calculatorul alege în mod aleator un număr natural x din intervalul închis . Tutrebuie să  ghiceşti acest număr, adresînd calculatorului cît mai puţine întrebări de genul“Numărul ales se afla in intervalul închis ?”, unde

    ],[ nm

    ],[ ba nbam   ≤≤ , . La fiecare întrebare

    calculatorul r ăspunde prin cuvîntul "da" (t rue) sau "nu" ( f al se).Elaboraţi un program care ghiceşte numărul x.

    Date de intrare. Fişier de intrare nu există. Intervalul poate fi aflat apelînd

     procedura predefinită  I nt er val :],[ nm

     procedure  I nt er val ( var m, n : i nt eger ) ;

    care returnează valorile m, n.

    Pentru a pune întrebări, puteţi apela funcţia predefinită  SeAf l aI n:

    function  SeAf l aI n( a, b : i nt eger ) : bool ean;

    care returnează valoarea t rue  dacă  b xa   ≤≤  şi f al se în caz contrar.Pentru ca subprogramele I nt er val şi  SeAf l aI n  să  fie accesibile, includeţi în

     partea declarativă a programului de elaborat linia

    uses Numer e; 

    Unitatea de program Numer e  se afla în directorul ORI 2004.Date de ieşire. Fişier de ieşire nu există. Pentru a comunica calculatorului numărul

    ghicit x, apelaţi procedura predefinită  Numarul Ghi ci t :

     procedure  Numar ul Ghi ci t ( x : i nt eger ) ;

    Punctaj.1. Programul care pune mai mult de 30 de întrebări, nu va primi nici un punct.2. Programul poate primi cel mult 10 puncte, după cum urmează:

    •  Dacă numărul x din fişierul de ieşire este corect, programul va primi 2 puncte.•  Restul de pînă la 8 puncte sînt alocate în dependenţă de numărul total de întrebări

    adresate calculatorului (apeluri ale funcţiei SeAf l aI n):−  cu cît mai puţine întrebări vor fi adresate calculatorului, cu atît mai multe

     puncte va primi programul;−   programul care va pune un număr minim de întrebări va primi 8 puncte;−   programul care va pune 30 de întrebări nu va primi puncte suplimentare.

    Exemplu. Presupunem, că apelul I nt er val ( m, n)  returnează valorile m = 2 şi n = 8.Pentru a ghici numărul x, calculatorului i-au fost adresate următoarele întrebări:

     Întrebare Ră spunsSeAf l aI n( 2, 5)SeAf l aI n( 2, 3)  SeAf l aI n( 4, 4)  

    truef al setrue 

    Prin urmare, se va executa apelul Numar ul Ghi ci t ( 4) .  Restricţii. 00032,1   ≤≤ nm . Timpul de execuţie nu va depăşi o secundă. Fişierul sursă 

    va avea denumirea GHI CI . PAS, GHI CI . C  sau GHI CI . CPP. Execuţia programului va fiîntreruptă dacă calculatorului îi vor fi adresate mai mult de 30 de întrebări.

    32

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    33/50

    Rezolvare

    Presupunem, că se doreşte găsirea numărului x prin metoda trierii:

    for  i : = m to  n do if  SeAf l aI n( i , i ) then  begin  x: =i ; goto  1 end ;

    1: wr i t el n( x) ;

    Media numărului de întrebări k  adresate calculatorului în metoda trierii se determină din relaţia:

    2

    1+−=

    mnk  .

    În condiţiile problemei, 00032,1   ≤≤ nm  şi 00016=k  . Evident, acest fapt poate ducela încălcarea restricţiei referitoare la numărul de întrebări, conform căreia sînt admise numaivalorile .30≤k 

    Pentru a elabora un algoritm ce minimizează  media numărului de întrebări k , vomconsidera primul jucător ca o sursă de informaţie cu mulţimea mesajelor posibile:

    }...,,2,1,{}...,,,{ 21 baaa s s sS   p   ++== ,

    unde numărul de mesaje .1+−= mn p  

    Este cunoscut faptul, că  cantitatea de informaţie  I dintr-un mesaj al unei surse cu  p 

    mesaje posibile coincide cu media numărului minim de întrebări k , necesare pentruidentificarea univocă  a mesajelor. Procesul de identificare se realizează  cu ajutorul unorîntrebări standart, generate prin metoda dihotonomiei, şi la care se r ăspunde prin "da" sau"nu".

    Algoritmul ce realizează metoda dihotonomiei include următoarele etape:

    1. 

    Introducem în studiu intervalul curent . Iniţial],[ ba ],[],[ nmba  =

    .2.  Divizăm intervalul curent în intervalele şi . Pentru aceastacalculăm "mijlocul" intervalului :

    ],[ ba ],[ ca ],1[ bc +

    ],[ ba

    )2

    (ab

    Truncac  −

    += ,

    unde Trunc este o funcţie ce returnează partea întreagă a argumentului .2/)( ab −3.  În continuare, în dependenţă de r ăspunsul la întrebarea standard “Numărul căutat se

    află  în intervalul ?”, desemnăm ca interval curent unul din intervalele sau

    .

    ],[ ca ],[ ca],1[ bc +

    4.  Procesul de calcul continuă pînă cînd intervalul curent va conţine numai un singur

    număr.Arborele ce simbolizează  într-o formă  grafică procesul de căutare a numărului  x, este

     prezentat în fig . 1. Întrucît , în procesul căutării vor fi examinate intervalele ,şi .

    4= x ]5,2[ ]3,2[]4,4[

     

    33

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    34/50

     

     Fig . 1

    În programul ce urmează  metoda dihotonomiei este realizată  cu ajutorul proceduriirecursive Caut a.

    Program   Ghi ci ;uses  Numer e;var  m, n, x : i nt eger ;

    I nt r are, I esi re : text ;

     procedure  Caut a( a, b : i nt eger ; var  x : i nt eger ) ;{ Caut a numarul x pr i n met oda di hot onomi ei }

    var  c : i nt eger ; begin if  a=b then  x: =aelse  begin 

    =a+t r unc( ( b- a) / 2c: ) ;if  SeAf l aI n( a, c) then  Caut a( a, c, x)else  Caut a( c+1, b, x) ;

    end ;end ; { Caut a }

     begin 

    I nt er val ( m, n) ;Caut a( m, n, x) ;Numar ul Ghi ci t ( x) ;

    end .

    Din  fig . 1 se observă  că  numărul de întrebări k   adresate calculatorului satisfaceinegalitatea:

    k k   p 22 1 ≤

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    35/50

    Radiaţii

    În urma unei catastrofe tehnogene o por ţiune dreptungiular ă de teren a fost poluată cusubstanţe radioactive. Pentru a descrie gradul de poluare, terenul respectiv a fost divizat în

     pătrate de dimensiuni identice, numărul acestora fiind n × m. Fiecare pătrat este definit princoordonatele sale (i,  j). Cercetătorul trebuie să  ajungă  din pătratul (1, 1) în pătratul (n, m).

    Trecerea dintr-un pătrat în altul se efectuează  numai prin laturile adiacente. Este cunoscutfaptul că la parcurgerea pătratului (i,  j) cercetătorul va primi o doză de radiaţi de d ij unităţi,doza totală  reprezentînd suma dozelor din pătratele parcurse. Alegînd diferite drumuri,cercetătorul ar putea minimiza doza totală. Elaboraţi un program ce calculează  doza totală minimă d min.

    Date de intrare. Fişierul text RADI ATI I . I N conţine pe prima linie numerele naturalen,  m, separate prin spaţiu. Următoarele n  linii conţin cîte m  numere întregi. Linia i+1 afişierului de intrare conţine numerele d i1, d i2, ..., d im.

    Date de ieşire. Fişierul text RADI ATI I . OUT  va conţine pe o singur ă  linie numărulîntreg d min.

    Exemplu.

    RADI ATI I . I N RADI ATI I . OUT

    93 52 100 0 100 1001 100 0 0 01 0 3 100 2 

    Restricţii. 30,1   ≤≤ mn ; . Timpul de execuţie nu va depăşi o secundă. Fişierul

    sursă va avea denumirea RADI ATI I . PAS, RADI ATI I . C sau RADI ATI I . CPP.

    1001   ≤≤ ijd 

      35

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    36/50

     

    Rezolvare

    Vom reprezenta procesul de căutare a drumului cu ajutorul desenului ce urmează:

    (1, 1)

    (2, 1)

    (3, 1)(1, 3)

    (1, 4)

    (1, 5)

    (2, 2)

    (3, 2)(2, 3)

    (3, 3)

    (1, 2)

    (2, 4)

    (2, 5)

    (3, 5)

    (3, 4)

     

    Pe acest desen pătratele terenului sînt simbolizate prin puncte, iar trecerea dintr-un pătrat în altul −  prin liniile ce reunesc punctele respective. De exemplu, linia ce reuneşte punctele (1, 1) şi (1, 2) reprezintă trecerea din pătratul cu coordonatele (1, 1) în pătratul cucoordonatele (1, 2). Prin urmare, problema iniţială  se reduce la căutarea unui drum de costminim în graful ce descrie por ţiunea poluată de teren. Algoritmul respectiv este cunoscut înliteratura de specialitate ca algoritmul lui  Deijkstra. Totuşi în cazul nostru acest algoritm nu

     poate fi programat în varianta clasică, întrucît mecesarul de memorie pentru păstrarea matriceide adiacenţă va fi de 900900)3030)(3030())((   ×=××=×× mnmn  de elemente.

    Pentru a micşora necesarul de memorie, vom efectua toate calculele într-o matrice:mn×

    mnijr  R

    ×

    = ,

    unde elementul r ij  reprezintă  doza minimă  de radiaţie care va fi primită  la trecerea din pătratul (1,1) pînă în pătratul (i, j). Elementele matricei R pot fi calculate iterativ, memorînd lafiecare pas numai dozele minime. Elementele, valorile cărora au fost deja calculate, vor fi

    marcate prin schimbarea semnului în minus. Evident, după  calcularea tuturor elementelormatricei R, semnul elementului (m, n) va fi schimbat în plus.

    Program   Radi at i iConst

    MaxN=30;{Pent r u mi scar ea i n cel ul a adi acent a}Dx: Ar r ay [ 1. . 4] Of I nt eger =( 0, 0, - 1, 1) ;Dy: Ar r ay [ 1. . 4] Of I nt eger =( - 1, 1, 0, 0) ;

     Var

    {A- t abl oul car e se ci t este di n f i s i erR- t abl oul car e est e r ecal cul at l a f i ecar e pas}A, R : Ar r ay [ 1. . MaxN, 1. . MaxN] Of I nt eger ;N, M, Rez : I nt eger ;i , j : I nt eger ;

    36

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    37/50

      I nt r are, I esi re: text ;

    {gasest e el ement ul mi ni m di n t abel ul R, si pozi t i a l ui }{se vor consi der a doar el ement el e pozi t i ve}Procedure  Get Mi n( Var s i , s j : I nt eger ) ; Var  i , j , mi n : I nteger ;

     begin

    mi n: =MaxI nt ; si : =1; sj : =1;For  i : =1 To  N Do For  j : =1 To  M Do If  (R[ i , j ] >0)  And   ( R[ i , j ] =0)then

    Begin

    If  ( R[ ni , nj ] =0) Or ( R[ s i , s j ] +A[ ni , nj ]

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    38/50

    Ziua 2

    Clasele 10 – 12

    38

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    39/50

    DepozitulPentru păstrarea în siguranţă  a unor cantităţi mari de substanţe radioactive, într-o regiune

    îndepărtată  a fost construit un depozit subteran. Depozitul este format dintr-o reţea de tuneluri laintersecţia cărora se află zone de depozitare. Orice zonă de depozitare poate fi liber ă sau ocupată decontainere cu substanţe radioactive. Tunelurile depozitului formează  un caroiaj, iar distanţa dintreoricare două zone vecine este egală cu 1 (vezi fig. 1).

     Fig. 1Tunelurile care merg în direcţia est-vest sînt numerotate prin 1, 2, 3, ..., m, iar cele în direcţia

    nord-sud prin 1, 2, 3, ..., n. Fiecare zonă de depozitare se identifică printr-o adresă unică de forma (i, j), unde i  este numărul tunelului est-vest, iar  j  al celui nord-sud, la intersecţia cărora se află  zonarespectivă.

    Prin coridoare şi prin zonele de depozitare se deplasează un robot. Robotul poate trece printr-ozonă  de depozitare numai atunci cînd ea este liber ă. Se consider ă  că  indiferent de zona de plecare,robotul poate ajunge în oricare altă zonă liber ă a depozitului.

    Elaboraţi un program care cunoscînd adresele zonelor ocupate, determină  cel scurt drum cetrebuie parcurs de robot pentru a ajunge din zona (a, b) în zona (c, d ). Distanţele parcurse de robot îninteriorul zonelor de depozitare nu vor fi luate în consideraţie.

    Date de intrare. Fişierul text DEPOZI T. I N  conţine pe prima linie numerele naturale m, n separate prin spaţiu. Linia a doua a fişierului de intrare conţine numerele naturale a, b − adresa zoneide plecare, iar linia a treia numerele naturale c, d  − adresa zonei de sosire. Linia a patra a fişierului deintrare conţine numărul natural k  − numărul zonelor ocupate de containerele cu substanţe radioactive.Următoarele k   linii ale fişierului de intrare conţin cîte două numere naturale i,  j −  adresele zonelorocupate.

    Date de ieşire. Fişierul text DEPOZI T. OUT  va conţine pe prima linie numărul natural  L − lungimea celui mai scurt drum ce trebuie parcurs de robot pentru a ajunge din zona (a, b) în zona (c,d ). Fiecare din următoarele 1+ L   linii ale fişierului de ieşire va conţine cîte două  numere naturaleseparate prin spaţiu, ce reprezintă adresele zonelor ce formează cel mai scurt drum. Zonele respectivevor fi indicate în ordinea parcurgerii lor de către robot. Dacă  există două  sau mai multe drumuri delungimea L, în fişierul de ieşire se va indica numai unul din ele.

    Exemplu.

    DEPOZI T. I N DEPOZI T. OUT42 22 32 43 43 5

    4 52 23 571 31 41 52 53 23 34 5

    Restricţii. 1 ;100,   ≤≤ nm mca   ≤≤ ,1 nd b   ≤≤ ,; 1 ; 00011   ≤≤ k  . Timpul de execuţie nuva depăşi 2 secunde. Fişierul sursă  va avea denumirea DEPOZI T. PAS, DEPOZI T. C  sauDEPOZI T. CPP.

    39

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    40/50

    Rezolvare

    Pentru a determina lungimea celui mai scurt drum vom folosi metoda propagării undeinumerice, cunoscută  în literatura de specialitate ca algoritmul lui  Lee. Introducem în studiu

    tabloul ij z Z   = , unde zij reprezintă  lungimea celui mai scurt drum de la zona (a, b) la zona

    (i, j). Iniţial zonele libere vor fi marcate în tabloul Z  printr-o valoare negativă, de exemplu −1,iar zonele ocupate prin altă valoare negativă, de exemplu, − 2 (vezi fig. 2). Evident, zab = 0.

    Tabloul ini ţ ial 

    1 2

    1

    3

    3

    2

    4   5

    4

    −1

    −2−1   −1

    −1 −1 −1

    −2 −2

    −2

    −2   −2

    −2

    −1 −1

    −1 −1 −1 −1

    0

     L=0

    1 2

    1

    3

    3

    2

    4   5

    4

    −1

    −2−1   1

    1 1 −1

    −2 −2

    −2

    −2   −2

    −2

    −1 −1

    −1 −1 −1 −1

    0

     L=1

    1 2

    1

    3

    3

    2

    4   5

    4

    −21

    1 1

    −2 −2

    −2

    −2   −2

    −2

    −1 −1

    −1 −1 −1 −1

    0   2

    2

    2

     L=2

    1 2

    1

    3

    3

    2

    4   5

    4

    −21

    1 1

    −2 −2

    −2

    −2   −2

    −2

    −1

    −1 −1 −1

    0   2

    2

    2

    3

    3

     L=3

    1 2

    1

    3

    3

    2

    4   5

    4

    −21

    1 1

    −2 −2

    −2

    −2   −2

    −2−1

    0   2

    2

    2

    3

    3

    4   4

    4

     

     Fig. 2

    În continuare propagăm prin zonele depozitului o undă  numerică   L, unde  L  iaconsecutiv valorile 0, 1, 2, 3 ş.a.m.d. Pentru aceasta parcurgem iterativ tabloul  Z  şi atribuimvaloarea  L+1 elementelor ce corespund zonelor libere, vecine cu zona în care a ajuns undanumerică  L. Procesul iterativ se termină în momentul cînd unda numerică ajunge în celula (c,d ).

    Pentru a construi unul din cele mai scurte drumuri, vom parcurge elementele tabloului Z  în ordinea inversă apariţiei zonele respective în drumul căutat: de la zona (c, d ) la zona (a, b).

    Vom include în drumul în curs de construcţie cîte una din celulele ce apar ţin undei numerice: L, 1− L , 2− L , ..., 1.În programul ce urmează  valorile iniţiale ale tabloului  Z   sînt stabilite cu ajutorul

     procedurii I ni t i al i zar e. Pentru a simplifica analiza zonelor de la marginile depozitului,în tabloul  Z  au fost incluse liniile 0, m+1 şi coloanele 0, n+1 care formează un chenar, iarelementelor respective li se atribuie valloarea − 2 (zone ocupate). Unda numerică se propagă cu ajutorul procedurii UndaNumer i ca, iar unul din cele mai scurte drumuri este construit întabloul ** cu ajutorul procedurii Dr umul Mi ni m.

    Program   Depozi t ;{ Cl asel e 10- 12 }

    const  mmax=100; nmax=100;ocupat a=- 2; l i ber a=- 1;

    var  m, n, a, b, c, d : i nt eger ;

    40

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    41/50

      L : i nt eger ;Z : array[ 0. . mmax+1, 0. . nmax+1] of  i nt eger ;I nt r are, I esi re : text ;

    Procedure  I ni t i al i zar e;{ I ni t i al i zar ea t abl oul ui Z }

    var  i , j : i nt eger ; begin for  i : =1 to  m do for  j : =1 to  n do  Z[ i , j ] : =l i bera;

    for 0 to  m+1 do i : =   begin 

    Z[ i , 0] : =ocupat a;Z[ i , n+1] : =ocupat a;

    end ;for  j : =0 to  n+1 do  begin 

    Z[ 0, j ] : =ocupat a;

    Z[ m+1, j ] : =ocupata;end ;end ; { I ni t i al i zare }

    Procedure  Ci t i r e;{ Ci t i r ea dat el or di n f i s i er ul de i nt r ar e }var  i , j , k, q : i nt eger ;

     begin assi gn( I nt r ar e, ' DEPOZI T. I N' ) ;reset ( I nt rare) ;r eadl n( I nt r ar e, m, n) ;r eadl n( I nt r ar e, a, b) ;

    r eadl n( I nt r ar e, c, d) ;I ni t i al i zar e;r eadl n( I nt r ar e, k) ;

    for  q: =1 to  k do  begin 

    r eadl n( I nt r are, i , j ) ;Z[ i , j ] : =ocupat a;

    end ;cl ose( I nt rare) ;

    end ; { Ci t i r e }

    Procedure  Scr i e;

    { Scri er ea dat el or i n f i s i er ul de i esi r e } begin 

    assi gn( I esi r e, ' DEPOZI T. OUT' ) ;rewr i te( I esi re) ;wr i t el n( I esi re, L) ;cl ose( I esi re) ;

    end ; { Scr i e }

    Procedure  UndaNumer i ca;{ Propagarea undei numer i ce }var  i , j : i nt eger ;

     begin 

    Z[ a, b] : =0;L: =0;while  Z[ c, d] =l i ber a do 

    41

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    42/50

       begin for  i : =1 to  m do for  j : =1 to  n do if  Z[ i , j ] =L then  begin 

    i f Z[ i - 1, j ] =l i ber a t hen Z[ i - 1, j ] : =L+1;

    i f Z[ i , j - 1] =l i ber a t hen Z[ i , j - 1] : =L+1;i f Z[ i +1, j ] =l i ber a t hen Z[ i +1, j ] : =L+1;i f Z[ i , j +1] =l i ber a t hen Z[ i , j +1] : =L+1;

    end ; { t hen }L: =L+1;

    end ; { whi l e }end ; { UndaNumer i ca }

     begin Ci t i r e;UndaNumer i ca;Scr i e;

    end .

    Din analiza textului procedurii UndaNumer i ca  se observă  că  instrucţiunea if  dincomponenţa ciclurilor imbricate for va fi executată de mn ori. Corpul ciclului while va fiexecutat de cel mult L ori, unde L este lungimea celui mai scurt drum din zona (a, b) în zona(c, d ). Evident, lungimea acestui drum nu poate depăşi lungimea totală  a tunelurilordepozitului, deci mn L  < . Prin urmare, în cel mai nefavorabil caz, numărul de execuţii aleinstrucţiunii if va fi de ordinul m2n2.

    Conform restricţiilor din enunţul problemei, 100,   ≤nm . Prin urmare, numărul necesarde operaţii este de ordinul 108, mărime comparabilă  cu capacitatea de prelucrare a

    calculatoarelor personale.

    42

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    43/50

    Iepuraşul

    Se consider ă un sector de pădure de formă dreptunghiular ă cu dimensiunile nm× , unden şi m sînt numere naturale. Sectorul de pădure este divizat în pătr ăţele cu latura 1 ( fig . 1). Înunul din aceste pătr ăţele se află un iepuraş. Elaboraţi un program care determină coordonatelei,  j ale pătr ăţelului în care se află iepuraşul.

    Puteţi adresa calculatorului întrebări de genul “Iepuraşul se află în sectorul (a, b, c, d )?”,unde a, b reprezintă coordonatele colţului stînga-jos, iar c, d  coordonatele colţului dreapta-susale unui sector dreptunghiular de pădure. La fiecare întrebare calculatorul r ăspunde princuvîntul "da" (t rue) sau "nu" ( f al se).

    2

    1

    3

    31 2

    2

    4 5 6 7 8 9

    4

    56

    4

     Iepura şul 7

    6   x 

     Fig . 1

    Date de intrare. Fişier de intrare nu există. Dimensiunile pot fi aflate apelînd procedura predefinită  Di mensi uni :

    nm,

     procedure  Di mensi uni ( var m, n : i nt eger ) ;

    care returnează valorile m, n.

    Pentru a pune întrebări, puteţi apela funcţia predefinită SeAf l aI n:

    function  SeAf l aI n( a, b, c, d : i nt eger ) : bool ean;

    care returnează valoarea t rue dacă iepuraşul se află în dreptunghiul (a, b, c, d ) şi f al se încaz contrar.

    Pentru ca subprogramele Di mensi uni şi  SeAf l aI n  să  fie accesibile, includeţi în partea declarativă a programului de elaborat linia

    uses Padur e;Unitatea de program Padur e  se afla în directorul ORI 2004.

    Date de ieşire. Fişier de ieşire nu există. Pentru a comunica calculatorului coordonatelei,  j, apelaţi procedura predefinită  Coor donatel e:

     procedure  Coor donat el e( i , j : i nt eger ) ;

    Punctaj.

    1. Programul care pune mai mult de 60 de întrebări, nu va primi nici un punct.2. Programul poate primi cel mult 10 puncte, după cum urmează:

    •  Dacă coordonatele i,  j  din fişierul de ieşire sînt corecte, programul va primi 2

     puncte.•  Restul de pînă la 8 puncte sînt alocate în dependenţă de numărul total de întrebări

    adresate calculatorului (apeluri ale funcţiei SeAf l aI n):

    43

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    44/50

    −  cu cît mai puţine întrebări vor fi adresate calculatorului, cu atît mai multe puncte va primi programul;

    −   programul care va pune numărul minim de întrebări va primi 8 puncte;−   programul care va pune 60 de întrebări nu va primi puncte suplimentare.

    Exemplu. Presupunem, că  apelul Di mensi uni ( m, n)   returnează  valorile m  = 9 şi

    n  = 7. Pentru a determina coordonatele (i,  j), calculatorului i-au fost adresate următoareleîntrebări: 

     Întrebare Ră spuns

    SeAf l aI n( 1, 1, 5, 7)

    SeAf l aI n( 6, 1, 7, 7)

    SeAf l aI n( 6, 1, 6, 7)

    SeAf l aI n( 1, 1, 9, 4)

    SeAf l aI n( 1, 1, 9, 2)

    SeAf l aI n( 1, 3, 9, 3)

    f al se

    true

    f al se

    true

    f al se

    f al se

    Prin urmare, se va executa apelul Coor donat el e( 7, 4) .  Restricţii. 00032,1   ≤≤ nm ; mca   ≤≤ ,1 ; nd b   ≤≤ ,1 . Timpul de execuţie nu va depăşi

    o secundă. Fişierul sursă va avea denumirea I EPURAS. PAS, I EPURAS. C sau I EPURAS. CPP.Evaluatorul va întrerupe for ţat execuţia programului în cazurile în care calculatorului îi vor fiadresate mai mult de 60 de întrebări.

    Programele scrise în limbajele C   şi C++  vor conţine directiva:

    #i ncl ude “Padur e. h”

    iar suprogramele respective vor fi:

    void Di mensi uni ( i nt &m, i nt &n) ;

    int  SeAf l aI n( i nt a, i nt b, i nt c , i nt d) ;

    void   Coordonat el e( i nt i , i nt j ) ;

    44

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    45/50

    Rezolvare

    Presupunem, că se doreşte găsirea coordonatelor i, j prin metoda trierii:

    for  a: = 1 to  m dofor  b: = 1 to  n do 

    if  SeAf l aI n( a, b, a, b) then 

     begin  i : =a; j : =b; got o 1 end ;1: wr i t el n( i , j ) ;

    Media numărului de întrebări k  adresate calculatorului în metoda trierii se determină dinrelaţia:

    2

    mnk   = .

    În condiţiile problemei, 00032,1   ≤≤ nm   şi 00020051=k  . Evident, acest fapt poateduce la încălcarea restricţiei referitoare la numărul de întrebări adresate calculatorului,conform căreia sînt admise numai valorile 60≤k  .

    Pentru a elabora un algoritm ce minimizează  media numărului de întrebări k , vomconsidera calculatorul ca o sursă de informaţie cu mulţimea mesajelor posibile:

    },1;,1|),{( n jmi jiS    === ,

    în total mn mesaje.Este cunoscut faptul, că cantitatea de informaţie I dintr-un mesaj al sursei de informaţie

    coincide cu media numărului minim de întrebări k , necesare pentru identificarea univocă  amesajelor. Procesul de identificare se realizează cu ajutorul unor întrebări standart, generate

     prin metoda dihotonomiei, şi la care se r ăspunde prin "da" sau "nu". Prin urmare,

    nmmn I k 222

    logloglog   +=== ,

    unde I  reprezintă cantitatea de informaţie dintr-un mesaj al sursei în studiu.Întrucît

     y x S S S    ×= , unde )...,,3,2,1{ mS  x   =  şi )...,,3,2,1{ nS  y   = ,

    coordonatele i,  j  pot fi calculate separat, aplicînd metoda dihotonomiei pentru fiecare dinmulţimile S  x  şi S  y .

    Algoritmul ce realizează  metoda dihotonomiei include următoarele etape (cazulmulţimii S  x):

    5.  Introducem în studiu intervalul curent . Iniţial,],[  B A ],1[],[ m B A   = .6.  Divizăm intervalul curent în intervalele şi . Pentru aceasta

    calculăm "mijlocul" intervalului :],[  B A ],[ C  A ],1[  BC  +

    ],[  B A

    )2

    ( A B

    Trunc AC   −

    += ,

    unde Trunc este o funcţie ce returnează partea întreagă a argumentului .2/)(  A B  −7.  În continuare, în dependenţă de r ăspunsul la întrebarea standard “Iepuraşul se află în

    sectorul ( A, 1, C , n  )?", desemnăm ca interval curent unul din intervalele sau.

    ],[ C  A

    ],1[  BC  +8.  Procesul de calcul continuă pînă cînd intervalul curent va conţine numai un singur

    număr.

    Evident, în cazul mulţimii S  y, intervalul iniţial ],1[],[ n B A   = , iar întrebarea standard vaavea forma “Iepuraşul se află în sectorul (1, A, m, C )?".

    45

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    46/50

    Arborele ce simbolizează într-o formă grafică procesul de căutare a coordonatei i, este prezentat în  fig . 2. Întrucît iepuraşul se află  în pătr ăţelul cu coordonatele (7, 4), în procesulcăutării vor fi examinate intervalele , şi .]5,1[ ]7,6[ ]6,6[

     

    {3} {4} {5} {6} {7}

    da nu

    da   nu

    da   nu   da   nu

     da   nu

    da   nuk = 1

    k = 2

    k  = 3

    {1, 2, 3, 4, 5, 6, 7, 8, 9}

    {1, 2, 3, 4, 5} {6, 7, 8, 9}

    {1, 2, 3} {4, 5} {6, 7}

    {1, 2}

    {1} {2}

    da nu

    {8, 9}

    {8} {9}

    da nu

    k  = 4

     

     Fig . 2

    În programul ce urmează metoda dihotonomiei este realizată  cu ajutorul procedurilor

    recursive Caut aX şi Caut aY.

    Program   I epur as;uses  Padur e;var  m, n, i , j : i nteger ;

     procedure  Caut aX( a, b : i nt eger ; var  i : i nt eger ) ;{ Caut a coordonata i pr i n metoda di hotonomi ei }var  c : i nt eger ;

     begin if  a=b then  i : =aelse  begin 

    c: =a+t r unc( ( b- a) / 2) ;if  SeAf l aI n( a, 1, c, n)then  Caut aX( a, c, i )else  Caut aX( c+1, b, i ) ;

    end ;end ; { Caut aX }

     procedure  Caut aY( a, b : i nt eger ; var  j : i nt eger ) ;{ Caut a coordonata j pr i n pr i n metoda di hotonomi ei }var  c : i nt eger ;

     begin if  a=b then  j : =aelse  begin 

    46

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    47/50

      c: =a+t r unc( ( b- a) / 2) ;if  SeAf l aI n( 1, a, m, c)then  Caut aY( a, c, j )else  Caut aY( c+1, b, j ) ;

    end ;end ; { Caut aY }

     begin Di mensi uni ( m, n) ;Caut aX( 1, m, i ) ;Caut aY( 1, n, j ) ;Coor donat el e( i , j ) ;

    end .

    Din analiza arborilor de căutare ( fig . 2) rezultă, că în cazul cel mai nefavorabil numărulde întrebări k  adresate calculatorului se determină din relaţia:

    ] [ ] [ 30151500032log00032log 22   =+=+=+=  y x k k k  ,

    unde ] z [ simbolizează cel mai apropiat număr întreg, mai mare sau egal cu z. Evident, duratade execuţie a procedurilor CautaX şi Caut aY va fi cu mult mai mică decît 5 secunde.

    47

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    48/50

    Radiaţii

    În urma unei catastrofe tehnogene o por ţiune dreptungiular ă de teren a fost poluată cusubstanţe radioactive. Pentru a descrie gradul de poluare, terenul respectiv a fost divizat în

     pătrate de dimensiuni identice, numărul acestora fiind n × m. Fiecare pătrat este definit princoordonatele sale (i,  j). Cercetătorul trebuie să  ajungă  din pătratul (1, 1) în pătratul (n, m).

    Trecerea dintr-un pătrat în altul se efectuează  numai prin laturile adiacente. Este cunoscutfaptul că la parcurgerea pătratului (i,  j) cercetătorul va primi o doză de radiaţi de d ij unităţi,doza totală  reprezentînd suma dozelor din pătratele parcurse. Alegînd diferite drumuri,cercetătorul ar putea minimiza doza totală. Elaboraţi un program ce calculează  doza totală minimă d min.

    Date de intrare. Fişierul text RADI ATI I . I N conţine pe prima linie numerele naturalen,  m, separate prin spaţiu. Următoarele n  linii conţin cîte m  numere întregi. Linia i+1 afişierului de intrare conţine numerele d i1, d i2, ..., d im.

    Date de ieşire. Fişierul text RADI ATI I . OUT  va conţine pe o singur ă  linie numărulîntreg d min.

    Exemplu.

    RADI ATI I . I N RADI ATI I . OUT

    93 52 100 0 100 1001 100 0 0 01 0 3 100 2 

    Restricţii. 30,1   ≤≤ mn ; . Timpul de execuţie nu va depăşi o secundă. Fişierul

    sursă va avea denumirea RADI ATI I . PAS, RADI ATI I . C sau RADI ATI I . CPP.

    1001   ≤≤ ijd 

      48

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    49/50

     

    Rezolvare

    Vom reprezenta procesul de căutare a drumului cu ajutorul desenului ce urmează:

    (1, 1)

    (2, 1)

    (3, 1)(1, 3)

    (1, 4)

    (1, 5)

    (2, 2)

    (3, 2)(2, 3)

    (3, 3)

    (1, 2)

    (2, 4)

    (2, 5)

    (3, 5)

    (3, 4)

     

    Pe acest desen pătratele terenului sînt simbolizate prin puncte, iar trecerea dintr-un pătrat în altul −  prin liniile ce reunesc punctele respective. De exemplu, linia ce reuneşte punctele (1, 1) şi (1, 2) reprezintă trecerea din pătratul cu coordonatele (1, 1) în pătratul cucoordonatele (1, 2). Prin urmare, problema iniţială  se reduce la căutarea unui drum de costminim în graful ce descrie por ţiunea poluată de teren. Algoritmul respectiv este cunoscut înliteratura de specialitate ca algoritmul lui  Deijkstra. Totuşi în cazul nostru acest algoritm nu

     poate fi programat în varianta clasică, întrucît mecesarul de memorie pentru păstrarea matriceide adiacenţă va fi de 900900)3030)(3030())((   ×=××=×× mnmn  de elemente.

    Pentru a micşora necesarul de memorie, vom efectua toate calculele într-o matrice:mn×

    mnijr  R

    ×

    = ,

    unde elementul r ij  reprezintă  doza minimă  de radiaţie care va fi primită  la trecerea din pătratul (1,1) pînă în pătratul (i, j). Elementele matricei R pot fi calculate iterativ, memorînd lafiecare pas numai dozele minime. Elementele, valorile cărora au fost deja calculate, vor fi

    marcate prin schimbarea semnului în minus. Evident, după  calcularea tuturor elementelormatricei R, semnul elementului (m, n) va fi schimbat în plus.

    Program   Radi at i iConst

    MaxN=30;{Pent r u mi scar ea i n cel ul a adi acent a}Dx: Ar r ay [ 1. . 4] Of I nt eger =( 0, 0, - 1, 1) ;Dy: Ar r ay [ 1. . 4] Of I nt eger =( - 1, 1, 0, 0) ;

     Var

    {A- t abl oul car e se ci t este di n f i s i erR- t abl oul car e est e r ecal cul at l a f i ecar e pas}A, R : Ar r ay [ 1. . MaxN, 1. . MaxN] Of I nt eger ;N, M, Rez : I nt eger ;i , j : I nt eger ;

    49

  • 8/18/2019 Olimpiada Republicana Informatica 2004

    50/50

      I nt r are, I esi re: text ;

    {gasest e el ement ul mi ni m di n t abel ul R, si pozi t i a l ui }{se vor consi der a doar el ement el e pozi t i ve}Procedure  Get Mi n( Var s i , s j : I nt eger ) ; Var  i , j , mi n : I nteger ;

     begin

    mi n: =MaxI nt ; si : =1; sj : =1;For  i : =1 To  N Do For  j : =1 To  M Do If  (R[ i , j ] >0)  And   ( R[ i , j ] =0)then

    Begin

    If  ( R[ ni , nj ] =0) Or ( R[ s i , s j ] +A[ ni , nj ]