of 50
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 ]