Sunteți pe pagina 1din 46

CUPRINS

I. InfoCNTV la C.N.T.V.

II. Probleme de concurs - OJI

III. Articole. Studii de caz

10

Elemente de combinatoric

10

Rezolvarea numeric a ecuaiilor algebrice i

14

transcendente
Cum ne influeneaz viaa invazia de bii?

17

Studiu de caz problema rucsacului

18

IV. Ocolul pamntului n ... Informatic - marca C.N.T.V.

21

V. Programatorul cel viteaz ... 100 dintr-o lovitur!

26

Soluii de 100 de puncte la probleme de concurs

26

Rezultate la olimpiade i concursuri naionale 2013-2014

37
38

VI. Gnduri, pasiuni, experiene...


Cariera n IT, de la provocare tehnic la creativitate

38

Ce ncepe cu "I" i se termin cu "nformatic"

39

Totul despre participarea mea la Infomatrix

40

Ce este Cinema 4D?

41

VII. Mici programatori ... viitori (posibil !) mari programatori


Probleme propuse i rezolvate de elevi

43
43
45

VIII. Informatic DAR ... nu numai!


Algoritmii imaginaiei

45

Informatica n rime

45

De la GOOGLE citire ...

46

I.

InfoCNTV la C.N.T.V.

Pentru toi cei care au trecut pragul acestei coli - elevi, absolveni, profesori,
C.N.T.V. ne poart cu gndul ctre Cunoatere, Noutate, Tradiie, Valoare.
i pentru c msura valorii unei coli rezid nu numai n valoarea profesorilor
dar, mai ales, n reuita n via a elevilor pe care i-a format, cu o tradiie de 22 de ani,
profilul Matematic Informatic a adus colegiului, n timp, elevi de excepie care au
devenit absolveni cu strlucite cariere n IT. De aceea, am considerat c cea mai
frumoas idee a acestei reviste, pe lng consistena informatic, este aceea de a
cunoate (reaminti) civa dintre ei, care au rspuns, cu drag, invitaiei de a ne fi
alturi n acest demers.
Pentru acest prim numr al revistei de Informatic, cel mai potrivit argument
pentru a v convinge s parcurgei paginile revistei noastre, sunt rndurile scrise de
Andrei Homescu, olimpic naional la Informatic al C.N.T.V., actualmente doctorand la
U.C. IRVINE-USA, un exemplu care poate insufla inspiraie i poate nsuflei imaginaia
actualilor elevi, determinndu-i s-i cldeasc visurile pe studiu i seriozitate.
Ateptm i totodat invitm toi absolvenii s fac parte din proiectul nostru de
a readuce alturi marea familie a IT - itilor C.N.T.V. -iti, care ne reprezint cu cinste pe
mapamond (i v vei convinge c este aa, citind n continuare).

Prof. Gabriela Nodea

Idealuri devenite realitate!


Andrei Homescu,

PhD Candidate at UC Irvine, USA


Anii de liceean la Colegiul Naional Tudor
Vladimirescu din Tg-Jiu i-au lsat amprenta
asupra mea prin profesionalismul dasclilor mei i
dinamismul permanent al colegilor.
Premiile anuale, obinute la Olimpiada
Naional de Informatic (2001 - Premiul III, 2002
- Premiul II, 2003 - meniune i selectare Lot
naional, 2004 - Premiul II) i la numeroase alte
concursuri, au conturat alegerile ce au urmat n
cariera mea. n acei ani tiam doar c-mi doresc ca
activitatea mea s fie util! Nu anticipam cum se va
realiza visul meu, dar alegerile pe care le-am fcut
au fost mereu legate de importana muncii i mai puin de partea financiar! Acum nu regret fiindc
cele dou componente se mbin intrinsec!
n anul 2009 am absolvit Facultatea de Calculatoare din cadrul Universitii Politehnica din
Bucureti.
Am continuat s particip la concursuri de programare i am reprezentat facultatea la 3 ediii
consecutive ale concursului ACM pentru Europa de Sud-Est, obinnd locuri de top. n anii de
facultate am participat mpreun cu prietenii mei i la alte concursuri internaionale, toate n Europa.

n 2008 am fost admis la un internship la


Google- Mountain View California, iar licena am
pregtit-o n 2009 n Finlanda, la Tampere, n cadrul
unei burse Erasmus.
Cele patru luni petrecute la Tampere
University of Technology m-au apropiat de ceea ce
nseamn cercetare adevrat. Aprecierea de care
m-am bucurat acolo mi-a ntrit convingerea c nc
aveam multe idei neexplorate, c beneficiez de o
oportunitate de dezvoltare profesional, iar activitatea desfurat acolo a influenat deciziile mele
ulterioare.
Cnd am absolvit facultatea, aveam de fcut alegerea vieii: s merg s lucrez la Google sau
Facebook sau s m nscriu la doctorat. Am aplicat la un internship la Facebook- Palo Alto, California
(unde am i mers n 2010), dar am aplicat i pentru doctorat la mai multe universiti n SUA.
ncepusem s-mi conturez ceea ce doresc: s continui cercetarea la nivel de vrf! La vremea
respectiv, prea multora o alegere greit, dar eu asta-mi doream! Voiam s am acces la cercetare
adevrat, s-mi fac cunoscute ideile, s ajung s lucrez cu
pasionai ca mine! Alegerea universitii a fost legat de
domeniul de cercetare i dac ar fi s mai aleg odat, tot
University of California Irvine ar fi preferina mea. n vacanele
de la doctorat am mai mers la internshipuri la Facebook Palo
Alto n 2011 i 2013. Activitatea mea la UC Irvine m reprezint:
lucrez ntr-o echip extraordinar, cu un profesor coordonator
pasionat.
n cei patru ani de cnd sunt la UCI, am avut satisfacia
propriei contribuii la securitatea datelor, domeniu sensibil n
protecia informaiilor. Rezultatele obinute n laborator
mpreun cu colegii s-au concretizat n articole pe care le-am
prezentat la conferine internaionale: The 20th ACM Conference
on Computer and Communications Security, CCS '13, Berlin,
Germany, November 2013 (articolul Transparent Code Randomization for Just-in-Time Compilers),
International Symposium on Code Generation and Optimization, CGO '13, Shenzhen, China, February
2013 (articolul Profile-guided Automated Software Diversity), The 6th USENIX Workshop on
Offensive Technologies, WOOT '12, Bellevue, WA, USA, August 2012 (Microgadgets: Size Does Matter
in Turing-complete Return-oriented Programming), Symposium on Dynamic Languages, DLS '11,
Portland, OR, USA, October 2011 (articolul HappyJIT: A Tracing JIT Compiler for PHP). La toate
acestea am fost coautor, iar ele sunt publicate la adresa
www.ics.uci.edu/~ahomescu/.
Rezultatele muncii din ultimii ani n laboratorul de la
UCI a atras atenia i s-au gsit persoane care s investeasc
n punerea n practic a ideilor noastre.
i uite-aa fac ce-mi place, contribui la dezvoltarea
securitii datelor n contextul globalizrii, vd lumea i simt
c triesc cu adevrat!
Pe lng activitatea de cercetare, sunt permanent
preocupat s cunosc oameni i locuri, s tiu detalii istorice
sau date biografice ale personalitilor acestei lumi, n
general mi place s fiu informat.
Alegerile n via mi-au permis s vd multe locuri fascinante, printre care Marele Canion al
fluviului Colorado, cunoscut sub denumirea Grand Canyon, cea mai mare minune natural i stabilit
ca rezervaie, dar i multrvnitul Hollywood, intrat n istorie prin intermediul industriei
cinematografice. Hollywood-ul este un district situat n regiunea central a Los Angeles-ului,
California, USA. Creat n 1923, dar supus numeroaselor vandalizri de-a lungul anilor, vestita
semntur hollywoodian a fost restaurat ncepnd cu anul 2005, finalizndu-se n anul 2009.
Semntura este amplasat pe muntele Lee din lanul muntos Santa Monica. Cele 9 majuscule au

nlimea de 14m i se ntind pe o lungime de 110m. Sistemele de supraveghere i securitate a zonei


ferete zona de acte de vandalism care s mai contribuie la deteriorarea minunatei semnturi
hollywoodiane. Marele Canion al fluviului Colorado l-am vizitat mpreun cu prietenii din facultate.
Minunile create de ape, formele bizare ale reliefului i ntinderea imens a rezervaiei te fac s uii de
oboseal i s te minunezi permanent de unicitatea peisajului. Voi reveni cu plcere n Marele Canion,
oricnd voi avea un rgaz, deoarece totdeauna poi vedea altceva din minuniile acestei rezervaii
naturale.
Ca o concluzie a experienei mele de pn acum, a sugera tuturor s-i urmeze
instinctul n alegerile pe care le iau n via!
Dac la baza alegerilor fcute este i o documentare adevrat, dublat de
pasiunea unor lucruri bine fcute, succesul este garantat!
Andrei Homescu, absolvent C.N.T.V. Tg. Jiu, promoia 2000-2004
Profilul Matematic-Informatic

II. Probleme de concurs


Cum poi ajunge autor de probleme
la Olimpiade i Concursuri colare?
prof. Eugen Nodea
Membru al Comisiei Naionale de Informatic
Membru al Comisiei tiinifice de pregtire a Lotului Naional de Informatic juniori
Activitatea de compunere a problemelor se caracterizeaz prin spontaneitatea, imaginaia i creativitatea
autorului n scopul stimulrii gndirii, a inteligenei elevilor implicai n concursurile colare.
Criteriile urmrite de autor atunci cnd scrie o problem:
- noutatea i originalitatea enunului i a rezolvrii
- departajarea concurenilor prin punctaje pariale pentru complexitii diferite
- conceperea unui set de teste ce acoper toate cazurile particulare ale problemei
- respectarea programei colare
V supun ateniei dou probleme de la Olimpiada Judeean de Informatic, al cror autor sunt
(http://campion.edu.ro/arhiva/index.php?page=auth&action=view&type=author&id=5021).

Problema 1 - compresie (Olimpiada Judeean 2012, clasa a X-a)


Se consider un text memorat ntr-o matrice M, definit prin coordonatele colului stnga sus (x1,y1) i
coordonatele colului dreapta jos (x2,y2).
Prin aplicarea unui algoritm de compresie, matricei M i se asociaz un ir de caractere, notat CM.
irul de caractere CM este construit prin aplicarea urmtoarelor reguli:
a) dac matricea M are o singur linie i o singur coloan atunci CM conine numai
caracterul memorat n matrice;
b) dac toate elementele matricei sunt identice atunci ntreaga matrice M se
comprim i CM este irul kc, unde k reprezint numrul de caractere din
matrice, iar c caracterul memorat;
c) dac matricea este format din caractere diferite i are cel puin dou linii i
dou coloane atunci:
- matricea este mprit n 4 submatrice A, B, C, D dup cum este ilustrat n figura alturat, unde
4

coordonatele colului stnga sus ale submatricei A sunt (x1,y1), iar coordonatele colului dreapta
jos sunt ((x2+x1)/2,(y2+y1)/2);
- CM este irul *CACBCCCD unde CA, CB, CC, CD sunt irurile de caractere obinute, n ordine, prin
compresia matricelor A, B, C, D utiliznd acelai algoritm;
d) dac matricea este format din caractere diferite, are o singur linie i mai multe coloane atunci CM
este irul *CACB unde A, B, CA, CB au semnificaia descris la punctul c);
e) dac matricea este format din caractere diferite, are mai multe linii i o singur coloan atunci CM
este irul *CACC unde A, C, CA, CC au semnificaia descris la punctul c).
Cerin
Dat fiind irul de caractere CM ce se obine n urma aplicrii algoritmului de compresie asupra unei matrice M
de dimensiune NxN s se determine:
a) numrul de mpririi care au fost necesare pentru obinerea textului compresat;
b) matricea iniial din care provine textul compresat.
Date de intrare
Fiierul de intrare compresie.in conine pe prima linie un ir de caractere ce reprezint textul compresat.
Date de ieire
Fiierul de intrare compresie.out conine:
- pe prima linie un numr natural ce reprezint numrul nr de mpririi care au fost necesare pentru
obinerea textului compresat;
- pe urmtoarele N linii se gsesc cte N caractere, ce reprezint, n ordine, liniile matricei iniiale.
Restricii i precizri
2 N 1000
0 nr 1000000
1 lungimea irului compresat 1000000
Textul memorat iniial n matricea M conine numai caracterele din mulimea literelor mici {a...z}.
Pentru rezolvarea corect a cerinei a) se acord 20% din punctaj, iar pentru rezolvarea corect a
ambelor cerine se acord tot punctajul.
Exemple
compresie.in
*4b*bbab4a*abbb

*4a*ab*aba

compresie.out
3
bbbb
bbab
aaab
aabb
3
aaa
aab
aba

Explicaii
Au fost efectuate 3 mpriri:
b b b b a a a b
1) M *

b b a b a a b b
b b
a b
2)
3)
*(b)(b)( a )(b)
*(a )(b)(b)(b)
a b
b b

Au fost efectuate 3 mpriri:


a a a
1) M *
a ba
a a b

a
2) *(a )(b)
b

3) a b *(a)(b)

Timp maxim de executare/test: 0.5 secunde


Memorie total disponibil: 4MB, din care pentru stiv maxim 3MB
Descriere soluie compresie
Cerina 1
Numrul de mpririi care au fost necesare pentru obinerea textului compresat: nr = numrul de stelue *
Cerina 2
Dimensiunea N a matricei iniiale
- Expandm irul comprimat construind un ir de caractere ce conine doar caracterele liter mic din
irul comprimat. Fiecare caracter din irul comprimat care are naintea lui un numr k se va repeta n
noul ir de k ori.
- Fie L lungimea acestui ir: N = [sqrt(L)]

Cerina 3
Rezolvarea cerinelor problemei se face prin divide et impera.
Reinem matricea prin colul stnga sus (x1,y1), respectiv colul dreapta jos (x2,y2).
Vom parcurge irul compresat cu variabila k.
divide
mx = (x2 + x1) / 2; my = (y2 + y1) / 2;
// reconstruiesc submatriciile A,B,C,D
divide (x1, y1, mx, my);
//A
divide (x1, my + 1, mx, y2);
//B
divide (mx + 1, y1, x2, my);
//C
divide (mx + 1, my + 1, x2, y2); //D
stpnete
- Dac x1=x2 && y1==y2 atunci M[x1][x2] = sir[k]
- Daca sir[k] {0..9} atunci se va forma numrul x, iar submatricea definit de
coordonatele colului stnga sus (x1,y1) i de coordonatele coltului dreapta jos (x2,y2) va fi
completat cu caracterul din ir asociat numrului format.
Nu este necesar etapa combin.
Sursa C++
1. # include <cstdio>
2. # include <cmath>
3. # include <cstring>
4. using namespace std;
5.
6. char s[1000001];
7. char M[1001][1002];
8. int L, N, nr, i, j, k;
9. void reconstruieste(short x1, short y1, short x2, short y2)
10.
{
11.
short mx, my, x, i, j;
12.
13.
//conditia de oprire
14.
if (x1<=x2 && y1<=y2 && k<L)
15.
{
16.
//stapaneste
17.
if (x1==x2 && y1==y2) M[x1][y1] = s[k++];
18.
else
19.
if (s[k]>='0' && s[k] <='9')
20.
{
21.
x = 0;
22.
while (s[k]>='0' && s[k]<='9')
23.
{
24.
x = x*10 + (s[k] - '0');
25.
++k;
26.
}
27.
//completez submatricea
28.
for (i=x1; i<=x2; ++i)
29.
for (j=y1; j<=y2; ++j)
30.
M[i][j] = s[k];
31.
++k;
32.
}
33.
else //s[k] == '*'
34.
{
35.
//divide
36.
mx = (x2 + x1) >> 1; my = (y2 + y1) >> 1;
37.
++k;
38.
// reconstruiesc submatricile A, B, C, D
39.
//A
reconstruieste(x1, y1, mx, my);
40.
//B
reconstruieste(x1, my + 1, mx, y2);
41.
//C
reconstruieste(mx + 1, y1, x2, my);
42.
reconstruieste(mx + 1, my + 1, x2, y2); //D

43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.

}
}
}
int main()
{
freopen("compresie.in", "r", stdin);
freopen("compresie.out","w", stdout);
fgets(s, 1000001, stdin);
L = strlen(s);
//punctul 1 si 2
k = 0; nr = 0; j = 0;
for (i=0; i < L; ++i)
if (s[i] == '*') ++nr;
else if (s[i]>='0' && s[i]<='9') k = k*10 + (s[i] - '0');
else if (s[i]>='a' && s[i]<='z')
{
if (s[i-1]<'a' && k) j+=k, k=0;
else ++j;
}
N = (int) sqrt((double) j);
printf("%d %d\n", nr, N);
//punctul 3
k=0;
reconstruieste(1,1,N,N);
for (i=1; i<=N; ++i)
{
for (j=1; j<=N; ++j)
printf("%c", M[i][j]);
printf("\n");
}
return 0;
}

Problema 2 - cool

(Olimpiada judeean 2014, clasa a IX-a)

Se consider un ir A cu N elemente naturale nenule, Numim secven de lungime K a irului A orice


succesiune de elemente consecutive din ir: Ai, Ai+1,, Ai+K-1.
O secven o numim secven cool dac elementele care o compun sunt distincte i pot fi rearanjate astfel
nct s alctuiasc o secven continu de numere consecutive.
De exemplu, dac considerm irul A=(3,1,6,8,4,5,6,7,4,3,4) secvena (8,4,5,6,7) este o
secven cool deoarece conine elemente distincte ce pot fi rearanjate astfel nct s alctuiasc irul de
numere consecutive 4,5,6,7,8, pe cnd secvenele (4,3,4), (6,7,4,3) nu sunt considerate secvene
cool.
Cerin
Fiind dat un ir de N numere naturale nenule s se determine:
a) Pentru o valoare dat K s se verifice dac secvena A1, A2,, AK este secven cool. Dac secvena
este cool se va afia cea mai mare valoare ce aparine secvenei. Dac secvena nu este cool se va
afia numrul elementelor distincte din secvena A1, A2,, AK, adic numrul elementelor care apar
o singur dat.
b) lungimea maxim a unei secvene cool i numrul secvenelor cool de lungime maxim.
Date de intrare
Fiierul de intrare cool.in conine pe prima linie un numr natural p. Pentru toate testele de intrare, numrul
p poate avea doar valoarea 1 sau valoarea 2.
Pe linia a doua linie se gsesc desprite prin spaiu dou numere naturale N K.
Pe urmtoarea linie se gsesc N numere ntregi separate prin spaiu, ce reprezint elementele irului.

Date de ieire
Dac valoarea lui p este 1, se va rezolva numai punctul a) din cerin.
Fiierul de ieire cool.out va conine pe prima linie un numr natural, numr ce reprezint conform cerinei
a) maximul secvenei A1, A2,, AK dac secvena este secven cool, sau numrul elementelor distincte din
secven, dac aceasta nu este secven cool.
Dac valoarea lui p este 2, se va rezolva numai punctul b) din cerin.
Fiierul de ieire cool.out va avea dou linii. Prima linie conine un numr natural nenul ce reprezint
lungimea maxim a unei secvene cool, iar urmtoarea linie un numr natural nenul ce reprezint numrul de
secvene cool care au lungimea maxim.
Restricii i precizri
1 N 5000
2 K 1000
1 A[i] 1000, 1 i N
Pentru 30% dintre teste N 1000
Pentru rezolvarea primei cerine se acord 20% din punctaj, iar pentru cerina a doua se acord 80% din
punctaj.
Exemple
cool.in
1
7 4
6 4 5 7 8 3 5
cool.in
1
7 6
6 4 5 7 5 4 3

cool.out Explicaie
7
Atenie! Pentru acest test se rezolv doar cerina a).
Secvena 6 4 5 7 este cool.
Valoarea maxim din secven este 7
cool.out Explicaie
2
Atenie! Pentru acest test se rezolv doar cerina a).
Secvena 6 4 5 7 5 4 nu este secven cool. Numrul
valorilor distincte din secven este 2. Valorile distincte sunt:
6,7
cool.in
cool.out Explicaie
2
5
Atenie! Pentru acest test se rezolv doar cerina b).
11 4
2
Cele dou secvene cool de lungime maxim 5 sunt:
7 4 5 6 8 4 5 7 4 3 2
7 4 5 6 8
6 8 4 5 7
Timp maxim de execuie/test: 0.5 secunde.
Memorie total disponibil: 2 MB, din care 1 MB pentru stiv
Descriere soluie cool
Cerina a) ( 20 puncte)
Printr-o simpl verificare a frecvenei de apariie a primelor k numere se obine rspunsul ateptat.
Cerina b . ( 80 puncte)
O soluie brute-force obine 25p. O soluie bazata pe set(stl) obine 40-50p.
Rezolvarea cerinei b) pentru a obine cele 100p necesit cteva observaii.
Fie secvena ce conine k numere consecutive distincte:
x+1, x+2, ... , x+k
Observm c:
1) min = x+1, max = x + k => max - min == k-1
2) elementele sunt distincte
3) relaia 1) este adevrat indiferent de ordinea elementelor
Aadar,
- pentru orice secvena care ncepe pe poziia i i se termina pe poziia j se va determina minimul i
maximul
- secvena este cool daca respect relaiile 1) si 2)
Astfel, complexitatea rezolvrii subpunctului b) poate fi redus la O(N*k) amortizat.

Sursa C++
1. # include <cstdio>
2. # include <cstring>
3. # define NMax 5003
4. # define Nmax 1003
5. using namespace std;
6.
7. int a[NMax], ap[Nmax];
8. int n, Max, nr;
9.
10.
void cool()
11.
{
12.
int i, j, k, min, max;
13.
for (i=1; i < n; ++i)
14.
{
15.
min = a[i]; max = a[i];
16.
ap[a[i]] = 1;
17.
for (j=i+1; j<=n; ++j)
18.
{
19.
if (ap[a[j]]) break;
20.
ap[a[j]] = 1;
21.
if(a[j] < min) min = a[j];
22.
if(a[j] > max) max = a[j];
23.
k = j - i + 1;
24.
if(max - min == k - 1)
25.
{
26.
if (k > Max) Max = k, nr = 1;
27.
else if (k == Max) ++nr;
28.
}
29.
}
30.
memset(ap, 0, sizeof(ap));
31.
}
32.
}
33.
int main()
34.
{
35.
int i, k, p, Min = 1001, nr_dist = 0;
36.
freopen ("cool.in", "r", stdin);
37.
freopen ("cool.out","w", stdout);
38.
scanf("%d", &p);
39.
scanf("%d %d", &n, &k);
40.
for (i=1; i<=n; ++i)
41.
scanf("%d", &a[i]);
42.
if (p == 1)
43.
{
//a
44.
for (i=1; i<=k; ++i)
45.
{
46.
ap[a[i]]++;
47.
if (a[i] < Min) Min = a[i];
48.
if (a[i] > Max) Max = a[i];
49.
}
50.
for (i=Min; i<=Max; ++i)
51.
if (ap[i] == 1) ++nr_dist;
52.
if (nr_dist == k) printf("%d\n", Max);
53.
else printf("%d\n", nr_dist);
54.
}
55.
else
56.
{
//b
57.
cool();
58.
printf("%d\n%d\n", Max, nr);
59.
}
60.
return 0;
61.
}

III. Articole. Studii de caz


Elemente de combinatoric
Prof. Gabriela Nodea
Cuprins:

Permutri. Aranjamente. Combinri


Implementri sugerate

Acest articol i propune s insiste mai mult pe algoritmi ce necesit cunotine de combinatoric.
Evident c sunt necesare cunotine matematice de baz din teoria mulimilor i a numerelor, iar
cunotinele i abilitile algoritmice nu trebuie ignorate.

Permutri. Aranjamente. Combinri


Fie

i o funcie
, unde
i
sunt mulimi finite, astfel nct
i
,
.
Acestei funcii i se pune in coresponden o aranjare a mulimii de obiecte n mulimea de
csue, astfel nct n csua s intre obiectele din mulimea
.
Propoziie 1: Numrul funciilor

este egal cu

Propoziie 2: Numrul funciilor injective


, unde

, unde

, notat cu
i

, este egal cu
.

i reprezint numrul de aranjri a obiecte n


csue ordonate. Fiecare csu poate conine
oricte obiecte din , dar schimbnd ordinea obiectelor ntr-o csu rezult aranjri diferite.
Dac n definiia aranjamentelor renunm la restricia ca cele obiecte s fie distincte obinem un
aranjament cu repetiie de obiecte luate cte . n acest caz nu este necesar s presupunem
.
Exemplu: Fie
.
Aranjamentele de obiecte ale lui
Fie
sunt:

csue sunt:

.
Aranjamentele cu repetiie ce se pot forma cu aceste trei obiecte luate cte dou
.

Propoziie 3: Numrul funciilor bijective


, notat cu , este egal cu
, unde
.
(factorial)
i reprezint numrul de permutri a obiecte n csue ordonate.
Se numete permutare de grad

funcia bijectiv

Se noteaz cu mulimea permutrilor de gradul


Exemplu: Fie mulimea
,
.
Permutrile de
obiecte ale lui sunt:

i se scrie sub urmtoarea form:


i evident

Observaie: corespondena funcie cuvinte


Vom lua n considerare cuvinte de lungime formate din simboluri ale alfabetului
.
Oricrei funcii
i putem pune n corespondenta cuvntul
10

n care ordinea literelor conteaz.


i putem asocia funcia

Invers, cuvntului
Vom nota:

Propoziie 4: Numrul de cuvinte cresctoare de lungime

folosind

simboluri este cu

(combinri cu repetiie)
Propoziie 5: Numrul de cuvinte strict cresctoare de lungime
(combinri)

folosind

simboluri este cu

Exemplu:
,
;
Combinrile de
obiecte ale lui n
csue sunt:
.
Fie
Combinrile cu repetiie ce se pot forma cu aceste trei obiecte luate cte dou
sunt:

Formule i noiuni derivate

1. Permutri
Se numete permutarea identic a mulimii

, permutarea

Se numete punct fix al unei permutri


un numr
. Evident permutarea identic are puncte fixe
Numrul de permutri de elemente fr puncte fixe, notat cu

pentru care

pentru care avem


este

Se poate demonstra uor c:

Numrul de permutri a unei mulimi de

obiecte cu

puncte fixe este

Se numete inversiune a unei permutri


o pereche
.
O permutare a mulimii
poate avea cel mult
2. Aranjamente

Ank (n k 1) Ank 1, unde k 2.

cu

Numrul de aranjri ale unei mulimi de obiecte


astfef nct n sa avem obiecte, n
obiecte, unde
, este

Altfel spus, cele


permutrii, cele
cele

inversiuni

n csuele
obiecte, , n sa avem

elemente de tip se pot plasa n Cnn1 moduri pe cele


n2
n n1

elemente de tip se pot plasa n C

obiecte de tip

poziii ale

moduri pe poziiile rmase, ...,

se pot plasa n Cn k n1 ... nk 1 moduri.

Numrul de aranjamente cu repetiie este

~
Anm n m

Avem un numr infinit de obiecte de tipurile


11

.. n cte moduri putem aeza

obiectele pe n poziii?

~
Ank

Avem un numr infinit de obiecte de tipurile


putem alege n obiecte dintre aceste este

. Numrul de moduri n care

Cnkk11 Cnnk 1
3. Combinri

~m

~m

Dac notm cu Cn numrul combinrilor cu repetiie, atunci exist relaia: Cn Cm n 1

Cnk Cnk1 Cnk11

Cnk Cnnk

Cn0 Cn1 ... Cnn 2n

Binomul lui Newton: a b Cn a Cn a


n

1 n 1

0 n

b Cn2a n 2b2 ... Cnn 1abn 1 Cnnbn

Termenii din dezvoltare au forma generala: Tk 1 Cnk a nk bk

Implementri sugerate
Generarea permutrilor
backtracking recursiv
# include <fstream>
using namespace std;
ifstream f(permutari.in);
ofstream g(permutari.out);
int N, st[101], k, ap[101];
void tipar(int k){
for(int i=1; i<=k; ++i)
g << st[i] << ;
g << \n;
}
void back(int k)
{
int x, ev;
for(x=1; x<=N; ++x)
{
st[k] = x;
ev = (ap[st[k]] == 0);
if (ev){
ap[st[k]]=1;
if(k == N) tipar(k);
else back(k + 1); //urcam in stiva
ap[st[k]] = 0;
}
}
}
int main()
{
f >> N;
back(1);
return 0;
}

folosind next_permutation

# include <fstream>
# include <algorithm>
# include <vector>

12

using namespace std;


ifstream f(permutari.in);
ofstream g(permutari.out);
int n;
vector<int> a;
void tipar()
{
for (int i=0; i<n; i++)
g << a[i] << ;
g << \n;
return;
}
int main()
{
f >> n;
for (int i=1; i<=n; i++)
a.push_back(i);
do
{
tipar();
}while (next_permutation(a.begin(), a.end()));
return 0;
}

Generarea triunghiului lui Pascal


folosind o matrice
void comb(int N)
{
int i, j;
C[0][0] = C[1][0] = C[1][1] = 1;
for (i=2; i<=N; ++i){
C[i][0] = C[i][i] = 1;
for (j=1; j<i; ++j)
C[i][j] = (C[i-1][j-1] + C[i-1][j]) % Mod;
}
}

folosind doi vectori

void comb(int N)
{
int i, j;
L0[0] = L0[1] = 1; // linia 1
for (i=2; i<=N; ++i)
{
L0[i-1] = 1;
for (j=1; j<i; ++j)
L[j] = L0[j-1] + L0[j];
L[i] = 1;
//copiem linia curenta
for (j=0; j<=i; ++j)
L0[j] = L[j];
}
}

Bibliografie
[1.] Ioan Tomescu, Combinatorica si teoria grafurilor, Tipografia Universitatii Bucuresti, 1978;
[2.] Ioan Tomescu, Probleme de combinatorica si teoria grafurilor, EDP, Bucuresti, 1981;
[3.] www.infoarena.ro

13

Rezolvarea numeric a ecuaiilor algebrice i transcendente


Prof. Oana Dabelea
Se numete ecuaie algebric cu o singur necunoscut o ecuaie de forma: f(x)=0, unde f este
un polinom nenul.
Forma general a unei ecuaii algebrice de gradul n este:

a x
n

a n 1 x

n 1

............ a1 x a0 0, x
1

C, ai

C, i

{1,2,3,...n}, a n 0

ntr-o ecuaie algebric se realizeaz numai operaii algebrice ca adunri, scderi, nmulirii,
mpriri, ridicri la putere sau extrageri de radicali.
Dac o ecuaie nu poate fi redus la o ecuaie algebric folosind operaiile de mai sus se
numete ecuaie transcendent (ecuaii exponeniale, ecuaii logaritmice, ecuaii trigonometrice).
A rezolva o ecuaie nseamn a-i determina rdcinile sau soluiile ecuaiei, adic acele numere
C pentru care f()=0. Dac pentru ecuaiile algebrice se pot obine
forme generale ale soluiilor i se pot stabili propoziii n legtur cu
numrul lor, acest lucru nu mai e posibil pentru ecuaiile transcendente.
Prezentm mai jos o metod de rezolvare a ecuaiilor algebrice
transcendente:
Metoda njumtirii(biseciei) intervalului
Fie ecuaia :
f(x)=0 unde f:[a,b] R , f continua
(1)
f(a)<0 i f(b)>0
(2)
Vom demonstra c ecuaia are cel puin o soluie n [a,b].
tim c orice funcie continu pe un interval are proprietatea lui Darboux pe acel interval, adic:
() x1, x2 [a, b], x1 x2 i oricare ar fi numrul c situat ntre f ( x1 ) i f ( x2 ) (exist cel puin un
punct x ( x1 , x2 ) astfel nct f(x)=c. f(b).
Notm cu c mijlocul intervalului [a,b] adic c=(a+b)/2. Definim a1=a i b1=c dac f( c)>0 respectiv a1=c
i b1=b, dac f( c)<0.
Dac f(c)=0, atunci soluia ecuaiei este c.
n caz contrar f:[a1,b1]R ndeplinete aceleai condiii iniiale(1), (2) dar lungimea domeniului de
definiie este redus la jumtate.
Metoda poate fi continuat prin alegerea mijlocului [a1, b1] iar noul interval [a2, b2] va fi definit n
acelai mod c cel precedent.
Deci, metoda njumtirii intervalului const n ncadrarea succesiv a soluiei ecuaiei n intervale din
ce n ce mai fine sau altfel spus const n definirea a trei iruri { an},{bn},{cn} care sunt convergente la
soluia ecuaiei f(x)=0.
Demonstrm urmtoarele:
Proprietatea 1:
irul { an} este monoton cresctor i irul { bn} este monoton descresctor.
Demonstraie : Calculm
bn an= bn-1- cn-1= bn-1-( an-1+ bn-1)/2=( bn-1- an-1)/2 dac f(cn-1)<0; sau
bn- an= cn-1- an-1=( an-1+ bn-1)/2 - an-1=( bn-1- an-1)/2 dac f(cn-1)>0;
Deci pentru orice n1, bn- an=( bn-1- an-1)/2;
Utiliznd aceast egalitate pentru: n-1,n-2,,1 rezult bn- an=( (b-a)/2) >0 pentru c b>a ;
Deci bn>an nN ; Pe de alt parte cn este mijlocul intervalului [an, bn] i avem relaia : an< cn< bn
nN; Pentru a arta c irul { an} este monoton cresctor avem an= an-1 dac f(cn-1)>0;sau an= cn-1 dac
f(cn)<0; Pentru c an< cn< bn rezult c an-1 an { an} monoton cresctor analog irul {bn} este
monoton descresctor.
Proprietatea 2:
irurile { an} i { bn} sunt mrginite.
Demonstraie: Pornim de la relaia an < bn i majorm membrul drept (deoarece {bn} este ir monoton
descresctor) an bn bn-1 bn-2 b1 b0 nN;
Analog minorm n membrul stng pentru c { an } este ir monoton cresctor obinem
14

a0 a1 an bn nN;
Deci
a1 an bn bn-1 b1 b0 nN;
Rezult
a0 an< b0 { an} mrginit;,
a0< bn b0 { bn} mrginit;
Proprietatea 3:
irurile { an} i { bn} sunt convergente i au aceeai limit.
Demonstraie : Conform criteriului lui Weierstrass orice ir monoton i mrginit este convergent{
an} i { bn} sunt convergente .
Fie
an=A sau an A
bn= B sau bnB A,B a, b
a0

lim

lim

Atunci

lim

(an bn) =

lim
n
n

ba
=0
2n

A-B=0 A=B

Folosind criteriul cletelui irul {c } este convergent i el:


n relatia an cn bn
an <
cn
bn

lim
n

lim
n

lim
n

lim

cn=

Dac an i an i n relatia an cn bn an nN;


Proprietatea 4:
Numrul (limita comun a irurilor {an },{bn}{cn} este soluie a ecuaiei f(x)=0;
Demonstraie: datorit modului n care sunt definite irurile rezult f(an)<0 i f(bn)>0.
Cum f este continu prin trecere la limit se obine:
f(an)0 f()0 i
f(bn)0 f()0 de unde f()=0.

lim
n

lim
n

Pentru a exemplifica mai bine modul n care se poate determina soluia prezentm mai jos un program
care l-am implementat n C++ i arat foarte clar pe pai cum se realizeaz aceast njumtire pentru
2
un n dat. Implementarea s-a fcut pentru ecuaia x ln(1 x) sin x 1 0 , n care I=[0,2] i n=10.
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
double a,b,c;
int i,n;
double f(double x)
{return x*x*log(1+x)-sin(x)-1;}
int main()
{
cout<<"dati intervalul I=[a,b]"<<'\n';
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;

cout<<"Numarul de iteratii:"<<'\n';
cin>>n;
for (i=1;i<=n;i++)
{ c=(a+b)/2;
if (f(c)<0) a=c;
else b=c;
cout<<"la iter."<<i<<"sol. se afla in
interv." << setprecision(6) << a << ","
<< setprecision(6) << b <<"\n";
}
return 0;
}

Dei nu am determinat soluia, putem spune c dac o pstrm numai cu primele dou zecimale soluia
este 1.48; prin continuarea procedeului de njumtire pentru un n mai mare, putem obine oricte
zecimale exacte ale unei valori necunoscute.
2
Mai jos sunt prezentate pentru ecuaia x ln(1 x) sin x 1 0 ], datele obinute prin executarea
programului pentru n=10:
la iter.1 sol. se afla in interv.1.0000,2.0000
la iter.2 sol. se afla in interv.1.0000,1.5000
la iter.3 sol. se afla in interv.1.2500,1.5000
la iter.4 sol. se afla in interv.1.3750,1.5000
la iter.5 sol. se afla in interv.1.4375,1.5000

la iter.6 sol. se afla in interv.1.4688,1.5000


la iter.7 sol. se afla in interv.1.4688,1.4844
la iter.8 sol. se afla in interv.1.4766,1.4844
la iter.9 sol. se afla in interv.1.4805,1.4844
la iter.10 sol. se afla in interv.1.4805,1.4824

Estimarea erorii:
n cele mai multe situaii nu vom putea determina valoarea exact a lui .
Dar vom putea aproxima cu oricte zecimale. Astfel vom calcula un numr de termeni ai irului {cn} i
ne vom fixa un numr astfel nct | cn-|<.
Estimarea apriori a erorii const n obinerea unei inegalitati de forma | cn -|<(n).
Dac inecuaia cu necunoscuta n (n)< poate fi rezolvat, fr calculul termenilor
irului { cn } atunci vom ti, care element al irului { cn } aproximeaz soluia cu precizia .
Pentru estimarea apriorii a erorii folosim relaia: bn an =(b-a)/2 i faptul c , cn [an, bn].
15

Atunci | cn -|<| an - bn |= bn an =(b-a)/2 ;


Deci dac vrem s obinem soluia aproximativ a ecuaiei f(x)=0 cu eroarea va trebui s
calculm termenii irului {cn} pn la prima valoare a lui n care ndeplinete condiia
(b-a)/2< adic n=[ln((b-a)/)/ln2]+1.
Vom prezenta mai jos modul n care se poate determina cu trei zecimale exacte soluia ecuaiei:
x 2 ln(1 x) sin x 1 0 , pe intervalul I=[0,2] cu estimare apriorii a erorii.
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
double a,b,c,eps;
int i,n;
double f(double x)
{return x*x*log(1+x)-sin(x)-1;}
int main()
{
cout<<"dati intervalul I=[a,b]"<<'\n';
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
if(f(a)<0&&f(b)>0)
{

cout<<"dati estimarea erorii:";


cin>>eps;
n=floor(log((b-a)/eps)/log(2))+1;
for (i=1;i<=n;i++){
c=(a+b)/2;
if (f(c)<0) a=c;
else b=c;}
cout<<"solutia cu trei zec. exacte si
cu estim. apriorii a erorii
"<<setprecision(6) << c<<"\n";
}
else cout<<"nu este respectata ipoteza
problemei";
return 0;
}

Soluia cu trei zecimale exacte i cu estimare apriorii a erorii pentru eps=0.001 este: 1.481
Estimarea aposteori a erorii
Const n obinerea unei inegaliti de forma | cn -|<const| cn - cn-1 |. Problema determinrii soluiei cu
o eroare dat este acum principal modificat n sensul c o dat cu calculul termenilor c n , vom testa
realizarea condiiei: const| cn - cn-1 |<
Pentru estimarea aposteori a erorii pornim de la : | an - cn|=| bn - cn |=| an - bn |/2
De unde rezult | an bn |=2| an cn|; | an bn |=2| bn cn |
Deoarece an = cn-1 sau bn = cn-1 nseamn c cel puin una din cele dou egaliti anterioare au membrul
drept egal cu 2| cn-1 - cn |, deci | an - bn |=2| cn-1 - cn |
Pentru c , cn [an, bn] rezult | cn -|<| an - bn |=2| cn - cn-1 |
Deci, dac vrem s obinem soluia aproximativ cu eroarea estimat aposteori pentru ecuatia f(x)=0
prin metoda njumtirii intervalului trebuie s calculm termenii irului {cn } pn cnd 2| cn - cn-1 |<.
n cadrul acestei metode este posibil s utilizm ambele estimri.
Vom prezenta mai jos modul n care se poate determina cu trei zecimale exacte soluia ecuaiei:
x 2 ln(1 x) sin x 1 0 cu estimare apostori a erorii.
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
double a,b,c,eps,c1;
int i,n;
double f(double x)
{return x*x*log(1+x)-sin(x)-1;}
int main()
{
cout<<"dati intervalul I=[a,b]"<<'\n';
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
if(f(a)<0&&f(b)>0)
{
cout<<"dati estimarea erorii:";

cin>>eps;
c=a;
do{
c1=c; c=(a+b)/2;
if (f(c)<0)a=c;
else b=c;}
while(abs(c-c1)>=eps/2);
cout<<"solutia cu trei zecimale
exacte si cu estim. aposteori a erorii
" << setprecision(6)<<c<<"\n";
}
else cout<<"nu este respectata
ipoteza";
return 0;
}

Soluia cu trei zecimale exacte i cu estimare aposteorii a erorii pentru eps=0.001 este: 1.481.
Bibliografie:
[1.] Analiz numeric. Proiect manual XII Informatic, G.D. Matescu, Ileana Matescu, Editura Petrion
[2.] Metode de calcul numeric, Dumitru Ebnc, Editura Sitech Craiova, 1994.
[3.] Mic enciclopedie matematic, Editura tehnic Bucuresti, 1975

16

Cum ne influeneaz viaa invazia de bii?


Prof. Carmen Negrea
Acest eseu, se dorete o fi o Scrisoare deschis o provocare pe care o lansez vou, elevilor
Colegiului Naional Tudor Vladimirescu .
De ceva vreme, m tot gndesc ce a putea s scriu n acest prim numr al revistei noastre. Ce
anume v-ar prea interesant? Rspunsul la aceast ntrebare nu l-ai putea da dect voi, elevii. Chiar nu
cred c diferenele/conflictele dintre generaii sunt att de mari, indiferent de vrsta, dar exist un
dar, nu?!!
Aceste diferene, exist, normal, nu sunt i nu vreau s fiu ipocrit, le consider chiar benefice!
Dac n-ar exista atunci ar n-ar mai fi evoluie, nu?
Adevr i provocare!
Nu, nu are legtur cu niciun joc, ambele sunt legate strict de realitatea educaional pe care
uneori o negm din comoditate, alteori din ignoran sau din nefericire din indiferen. Dar totul are un
nceput, nu? i, orice nceput e greu i genereaz erori, dar ntotdeauna nvm din greeli, sau, uneori
pur i simplu ni se formeaz ntregul mai greu. Care-i problema? Important este s nu clachezi, e mai
simplu s cedezi, nu? e mai simplu s afirmi i s susii, ca profesor, c numai cum faci tu e bine, c
numai instrumentele , metodele de nvare-predare-evaluare pe care n timp ca dascl i le-ai format i
nsuit au devenit de neatins , adic... s recunoatem c am devenit prizonierii propriilor noastre
limite[1]?
ntr-un eseu publicistic PRO/ FESORII, tot mai departe de elevi, Andrei Mjeri, elev al
Colegiului Naional Tudor Vladimirescu Tg-Jiu, meniona n 2009, trim ntr-o societate ale crei
drepturi i liberti variaz pe o scar destul de ampl i cu o sumedenie de carene i a crei ghilotin
moral a ruginit de mult timp, dac cumva a funcionat vreodat. Sistemul educaional, dei intens
mediatizat, a dezvoltat lacune( sau mai bine spus lagune) ce nu vor fi uor "desecate" i readuse n
"circuitul agricol... profesorii prea exigeni, subiectele pentru bac mult prea grele pentru un elev de
nivel mediu, cu nsui sistemul bolnvicios i viciat. Am ajuns ns, la un nivel al decadenei
inacceptabil, la saturaie...care ar fi cauzele? Octavian Paler spunea: Avem o psihologie de popor
superficial, de popor care poate frige mititei pe orice Golgot. ...ceea ce ne lipsete nou ca
naiune este voina, mentalitatea dinamic i renunarea la "victimismul" de care suferim ca
popor prin excelent.. ".[2]
Cam dramatic i destul de trist , nu ? Din nefericire, nu pot nega n totalitate ce menioneaz
Andrei, acesta este adevrul, l contientizm sau nu, el exist.
Nimeni nu contest c tehnologia orict de avansat ar fi, va nlocui vreodat profesorul de la
clas, trebuie s recunoatem c cele mai importante lecii de via sunt predate fr ajutorul unui
calculator, pur i simplu apariia calculatoarelor i a instrumentelor tehnologice care exist pot fi
utilizate n mod controlat n beneficiul elevilor iar curiozitatea explorrii diferitelor platforme/reele de
comunicare i colaborare de ctre elevi ar putea fi direcionat n scop educativ cu efecte benefice i
vizibile n timp.
Ieri, tabla, creta, planele, mulajele erau principalele instrumente prin care profesorii i
construiau mesajul educaional. Spre exemplu, la orele de chimie, de cele mai multe ori, diferena dintre
o lecie dezastruoas i una interesant, motivant, n care elevii nvau din clas, era dat de accesul
n laborator i de existena substanelor necesare. Acum, aceast diferen o fac noile tehnologii,
aproape la orice materie. Tot ieri, n laboratorul de informatic existau cteva calculatoare HC90 iar
Bil Gates afirma c este imposibil ca unei persoane s-i trebuiasc pentru nevoi personale un calculator
cu o memorie mai mare de 64 KO.
Grigore Moisil spunea: "Calculatorul nu rezolv probleme, cum se spune. Problemele le rezolv
omul, dar n rezolvarea lor omul se serveste nu numai de toc i hrtie, ci i de calculator", subliniind faptul
c un calculator este un instrument de lucru, nu o "inteligent" de sine stttoare.
Provocarea pe care o lansez !
ncercai s rspundei, n scris, sau n gnd dac nu avei curajul public la urmtoarele ntrebri
(carmen.negrea12@gmail.com ):
Poate reui tehnologia s creeze un mediu educaional modern? Cum?
17

Care sunt carenele sistemului educational i cum ai vedea voi un sistem/mediu educaional astfel
nct s ieim cu toii (i noi ... i voi!!) din apatia asta generalizat din mediocritatea care din
nefericire ne nconjoar i n care ne complacem? (un articol foarte interesant, scris de un fost
olimpic la informatic l putei citi aici http://www.invatamantul.ro/ )
Pot reelele de socializare s nlocuiasc comunicarea i socializarea?
M putei convinge, prin argumente , exemple de bun practic, s accesez/utilizez frecvent pagina
de facebook, n condiiile n care zilnic toat lumea posteaz orice, orict, fr discernmnt cnd
vd c toat lumea d click la orice material?! Sincer, de like, nici nu vreau s vorbesc, chiar v
rog s nu ncercai s m convingei dac vreau s felicit pe cineva, pot s-o fac personal, pot s
dau un telefon.pot s comunic fr click iar numrul de like-uri, nu m intereseaz.90% din
ele le consider false, ipocrite!!
Sunt i excepii, le-am enumerate chiar eu, mai sus (la utilizarea instrumentelor tehnologice)...
Sunt subiectiv, normal! Dar, e dreptul meu! Nu pot nelege, de ce 80% din cei care folosesc aceast
platform de socializare se autodiscrediteaz ? (prin postarea unor materiale, imagini
compromitoare, penibile, triste, sigur, n noul DOOM va fi adugat cuvntul selfie patetic, nu?)
Bibliografia
[1]_A.Adler,Cunoaterea omului, Editura IRI,1996
[2] Andrei Mjeri, eseu publicistic PRO/ FESORII, tot mai departe de elevi , 2009

Studiu de caz problema rucsacului


Prof. Carmen Negrea

http://www.infoarena.ro/problema/rucsac
Se d o mulime format din N obiecte, fiecare fiind caracterizat de o greutate i un profit. S se
gseasca o submulime de obiecte astfel nct suma profiturilor lor s fie maxim, iar suma greutilor
lor s nu depeasc o valoare G.
Date de intrare

Pe prima linie a fiierul rucsac.in se vor gasi valorile N si G, cu semnificaia din enunt. Pe urmatoarele N
linii se vor gsi perechile de valori Wi si Pi, reprezentnd greutatea, respectiv profitul obiectului i.
Date de ieire
n fiierul de ieire rucsac.out se va afisa o singura valoare Pmax, profitul maxim care poate fi obinut
respectnd condiia problemei.
Restricii

1 N 5000, 1 G 10000
0 Wi, Pi 10000

Exemplu
rucsac.in rucsac.out
6
3
3
1
1
2
1

10
7
4
2
9
4
5

29

Rezolvare:
Pentru a calcula dinamic (n timp/pas cu pas) valoarea ctigului maxim utiliznd o anumit greutate,
folosim o matrice cu n linii si gmax coloane (n- numarul de obiecte, gmax= greutatea maxim a
rucsacului)
Semnificaii:
i- numarul de linie= numrul obiectului analizat la un moment dat
j- coloana= greutatea care se poate obine folosind obiectul cu numrul i
castig[i][j] - valoarea ctigului dac se folosete obiectul i pentru greutatea j
Valoarea maxim a ctigului va fi ultimul element al matricei castig[n][gmax]
18

Pentru a arta i obiectele care au fost utilizate se foloseste matricea selectat[][]- numrul ultimului
obiect utilizat.
Sursa C++
# include <fstream>
using namespace std;
ifstream f("rucsac1.in");
ofstream g("rucsac1.out");
int n, gmax, castig[1000][10000], gr[100000], c[200], selectat[1000][10000];
int main()
{ int i,j,k,p;
f>>n>>gmax;
for(i=1;i<=n;++i)
f>>gr[i]>>c[i];
//prelucrare
for(i=1;i<=n;++i)
{ for(j=1;j<=gmax;++j)
{ if(gr[i]<=j)
{if(c[i]+castig[i-1][j-gr[i]]>castig[i-1][j])
{
castig[i][j]=c[i]+castig[i-1][j-gr[i]];
selectat[i][j]=i;
}
else
{ castig[i][j]=castig[i-1][j];
selectat[i][j]=selectat[i-1][j];
}}
else
{castig[i][j]=castig[i-1][j];
selectat[i][j]=selectat[i-1][j];
}}
//afiri intermediare pentru a verifica cum se modific
g<<"modificare matrice castig la pasul "<<i<<endl;
for(k=1;k<=n;++k)
{for(p=1;p<=gmax;++p)
g<<castig[k][p]<<" ";
g<<endl;}
g<<"modificare matrice selectat la pasul" <<i<<endl;
for(k=1;k<=n;++k)
{for(p=1;p<=gmax;++p)
g<<selectat[k][p]<<" "; g<<endl;}
}
i=n; j=gmax;
g<<"castig total="<<castig[i][j]<<endl;
// afisare obiecte selectate
while(selectat[i][j])
{ int x=selectat[i][j];
g<<selectat[i][j]<<" ";
while(x==selectat[i][j]){j=j-gr[x];--i;}
}}
Exemplu 1
0000000000
modificare matrice castig la pasul 1
0000000000
0077777777
modificare matrice castig la pasul 2
0000000000
0077777777
0000000000
0 0 7 7 7 11 11 11 11 11
0000000000
0000000000
0000000000

0000000000
0000000000
modificare matrice selectat la pasul1
modificare matrice selectat la pasul2
0011111111
0011111111
0000000000
0011122222
0000000000
0000000000
0000000000

19

0 0 7 7 7 11 11 11 11 11
2 2 7 9 9 11 13 13 13 13
9 11 11 16 18 18 20 22 22 22
9 11 13 16 18 20 22 22 24 26
0000000000
modificare matrice selectat la pasul5
0011111111
0011122222
3313323333
4444444444
4454455455
0000000000
modificare matrice castig la pasul 6
0077777777
0 0 7 7 7 11 11 11 11 11
2 2 7 9 9 11 13 13 13 13
9 11 11 16 18 18 20 22 22 22
9 11 13 16 18 20 22 22 24 26
9 14 16 18 21 23 25 27 27 29
modificare matrice selectat la pasul6
0011111111
0011122222
3313323333
4444444444
4454455455
4666666666
castig total=29
obiecte selectate
65421

modificare matrice castig la pasul 3


0077777777
0 0 7 7 7 11 11 11 11 11
2 2 7 9 9 11 13 13 13 13
0000000000
..
modificare matrice selectat la pasul3
0011111111
0011122222
3313323333
0000000000
..
modificare matrice castig la pasul 4
0077777777
0 0 7 7 7 11 11 11 11 11
2 2 7 9 9 11 13 13 13 13
9 11 11 16 18 18 20 22 22 22
0000000000
0000000000
modificare matrice selectat la pasul4
0011111111
0011122222
3313323333
4444444444
0000000000
0000000000
modificare matrice castig la pasul 5
0077777777
Exemplu 2
Date de intrare:
5 10
3 4 3 10 5 greutati
2 3 8 12 7 cost
modificare matrice castig la pasul 1
0022222222
0000000000
modificare matrice selectat la pasul 1
0011111111
0000000000
modificare matrice castig la pasul 2
0022222222
0023335555
0000000000
modificare matrice selectat la pasul2
0011111111
0012222222
0000000000
0000000000
0000000000
modificare matrice castig la pasul 3
0022222222
0023335555
0 0 8 8 8 10 11 11 11 13
0000000000
modificare matrice selectat la pasul 3
0011111111
0012222222

0033333333
0000000000
modificare matrice castig la pasul 4
0022222222
0023335555
0 0 8 8 8 10 11 11 11 13
0 0 8 8 8 10 11 11 11 13
0000000000
modificare matrice selectat la pasul 4
0011111111
0012222222
0033333333
0033333333
0000000000
modificare matrice castig la pasul 5
0022222222
0023335555
0 0 8 8 8 10 11 11 11 13
0 0 8 8 8 10 11 11 11 13
0 0 8 8 8 10 11 15 15 15
modificare matrice selectat la pasul5
0011111111
0012222222
0033333333
0033333333
0033333555
castig total=15
53

20

IV. Ocolul pmntului n


INFORMATIC - marca C.N.T.V.
Deschidem seria articolelor care leag foti elevi, cu activitate n afara rii sau avnd
realizri de excepie cu impact internaional, de generaia actual, aspirant la poziii de top n
mari companii de IT sau cercetare la nivel de vrf.
Vom continua s-i cutm i s-i atragem n marea familie a C.N.T.V. itilor pe toi cei
care-i las amprenta ntr-un domeniu atins de globalizare ntr-un ritm alert. Ei sunt mai muli i
ni se vor altura n urmatoarele numere ale revistei!

De la C.N.T.V. la ... GOOGLE


M numesc Bogdan Druu, am terminat liceul
Tudor Vladimirescu n mai 2006, profilul Matematic Informatic. Pentru c de mic am fost pasionat de
programare i calculatoare am decis s urmez Automatic
i Calculatoare din cadrul Universitii Politehnica din
Bucureti.
Cnd am nceput s nv programare aveam doar 8
ani i am fost pasionat de cum poi desena obiecte pe
calculator folosind 10: & 20: ... si LINE & CIRCLE din
vechiul Basic rulat pe un HC fcut nainte ca eu s m nasc.
Pe la 11 ani am trecut la urmatorul nivel: Turbo Pascal a
fost pentru mine ca i cnd a fi redescoperit programare i
tot universul s-a schimbat. mi aduc aminte c unul dintre primii algoritmi nvai a fost Backtracking
prin clasa a 6-a. n ultimii ani de liceu am trecut la ceea ce urma sa devin marea dragoste: C/C++.
n timpul liceului am participat la Olimpiada Naional de Informatic de mai multe ori, iar n
ultimul an am reuit s m calific la proba de baraj pentru Olimpiada Internaional de Informatic. A
fost poate una dintre cele mai mari performane ale mele din timpul liceului (mpreun cu alte cteva
meniuni la faza naional i multe alte premii ctigate la concursurile inter-judeene).
n ceea ce privete programarea i algoritmica, am participat i n timpul facultii la ACM, iar
cea mai bun performan acolo a fost un loc 10 la faza European Central. De asemenea, n tot timpul
facultii am fost destul de pasionat de ceea ce nvam acolo i asta m-a fcut s nv i s deprind
multe cunotine.
mi aduc aminte cu mult plcere de primul meu job ca intern la Adobe care a fost n momentul
n care mi scriam lucrarea de licen i am decis c ar fi interesant s fac asta la o firm i de ce nu, dac
se putea, la una de renume. Interviul a fost unul dintre cele mai interesante din viaa mea pentru c am
fost acolo fr s tiu nimic despre cum este procesul de recrutare, ba mai mult dect att, fr s tiu
nimic despre ce urma sa fac la lucrarea de licen (era despre WEB, iar eu nu tiam diferena dintre
HTML si JS). Am trecut acel interviu poate cu mult noroc pentru c am reuit s demonstrez c am
cunotinele de baz despre calculatoare i cred c una dintre cele mai importante am reuit s rezolv o
problem de logic. Dup prima mea experien de lucru a urmat un alt job tot la Adobe, de data aceasta
ca full-time.
n vara anului 2011, ntr-un moment n care mi doream s vd America (ca orice oltean) am
cutat o soluie ca Adobe s m trimit la o conferin, un meeting, orice, ca s pot s ajung acolo. Din
pcate/fericire acest lucru nu a fost posibil i am auzit c ar fi unele firme care pot s plteasc o
excursie n America pentru un interviu. Am ajuns n San Francisco (Silicon Valley) i nu a fost nici un
motiv s m ntorc, pentru c cei mai buni ingineri din lume sunt aici. Google, c despre aceasta firm
este vorba, mi-a oferit libertatea i toate condiiile pentru a putea face lucruri pe care nu am avut ocazia
s le fac n alt parte.
n toat viaa mea m-am ghidat dup un simplu moto:
21

Dac nvei i eti serios n via, atunci viaa va fi serioas cu tine !


Pentru mine aa a fost i nu regret niciun moment cnd stteam n timpul liceului n laboratorul
de informatic (i i mulumesc domnului Nodea pentru asta) i nici atunci cnd n timpul facultii
petreceam ore scriind cod sau citind cri.

Un C.N.T.V. ist la ... Hong Kong


Visele de licean pot deveni realitate !
Sunt CNTV-ist!
Perioada 2002-2006 reprezint pentru mine mbinarea fascinantelor momente
copilreti, nconjurat de colegi i prieteni, cu magnificele ore, susinute cu
druire de profesori care au contribuit la alegerile mele ulterioare n via.
Visam atunci s lucrez la mari companii, s vd lumea i s contribui i eu la
progresul omenirii.
Cu gndul la visele mele de mplinire, m strduiam s nv ct mai mult,
participam la concursuri i olimpiade i alte activiti mpreun cu colegii mei.
Amprenta lsat de fiecare profesor cu care am studiat la Colegiul Naional
Tudor Vladimirescu din Tg.Jiu, profilul Matematic-Informatic, este cheia
alegerii continurii studiilor n domeniul calculatoarelor la Universitatea
Politehnica din Bucureti.
nc din studenie m-am angajat ca programator pentru a ncerca s-mi ndeplinesc visul. Am lucrat
nainte, succesiv, la 3 firme de IT i la fiecare mi-am ndeplinit cte o prticic din vis: mi-aduceam
contribuia la dezvoltare n domeniul IT, relativ la nivelul la care ajungeam n momentul respectiv.
Din iunie 2013 lucrez ca inginer de sistem pentru instituii bancare la Luxoft. Luxoft este o firm de top
care ofer servicii IT de calitate clienilor de pe ntregul glob, n diverse domenii, n special financiarbancare.
Este ceea ce visam cnd eram elev!
Activitatea pe care o desfor este complex, dar satisfaciile sunt pe msur: firma susine continua
perfecionare a personalului, oferind anse reale de participare la sesiuni gratuite de training n diverse
locuri pe glob. Eu am fost plecat n Hong Kong de dou ori, cte 3 luni, respectiv 2 luni, ntr-un singur
an.
Dei Hong Kong-ul este considerat ca fcnd parte din China, acesta este un teritoriu cu propriile legi,
recunoscut de organizaiile internaionale sub denumirea "Hong Kong, China". Exist consulate ale
tuturor statelor cu care au fost ncheiate parteneriate economice (peste
59 consulate generale i 62 consulate).
Influena britanic din perioada de colonie englez i-a pus amprenta
asupra educaiei i dezvoltrii economice a insulei, iar poziia geografic
i alipirea teritorial la China, de-a lungul istoriei sale, au influenat
cultura unei civilizaii considerat una dintre punile dintre Orientul
ndeprtat i Occident.
Localnicii din Hong Kong, frumoi i foarte inteligeni, arat asiatic, dar
majoritatea au nume europene i muli dintre ei sunt cretini. Beneficiind
de investiii ale marilor companii mondiale, Hong Kong-ul a favorizat
convieuirea oamenilor de diferite religii, de pe toate continentele.
Trind aici oameni de pe ntregul glob, am gsit restaurante cu specific
chinezesc, japonez, franuzesc, grecesc .a. Provocarea a fost pentru mine
mare pentru a gusta din fiecare fel de mncare. Am reuit chiar s nv
s mnnc att cu bee chinezeti, ct i cu cele japoneze. Ca un premiu pe
care mi l-am acordat pentru reuit, am cumprat cteva seturi de bee
pentru acas.
22

n Hong Kong te simi ca pe o punte ntre dou lumi: zgrie-norii i luxul, evidente n central oraului, i
mreia statuilor, templelor budhiste i cldirile cu aspect oriental existente pe insul sau n zonele
apropiate.
Activitatea mea zilnic s-a desfurat n centrul oraului, unde eram i cazat. De aceea, n weekend-uri
ieeam n zone mai puin influenate de arhitectura occidental: zone montane cu spaii verzi, cldiri cu
arhitectur asiatic i temple.
ntr-unul dintre weekend-uri mi-am planificat o excursie pe insula Lantau pentru a vedea vestita statuie
Big Buddha. Dup un drum de aproape dou ore (o or cu metroul i una cu autocarul), am ajuns ntro zon magic, tronat de o statuie gigant: statuia, situat pe coama unui deal, troneaz i parc veghez
asupra ntregii regiuni. Magnific prin construcie i plasament, statuia Big Buddha ofer turistului ca
mine trirea unui sentiment unic de mulumire sufleteasc.
Satisfacia personal este dubl: lucrez n domeniul pe care-l visam i pot s vd
lumea, deci, visele de licean pot deveni realitate!

Liviu Homescu, absolvent al Colegiului Naional Tudor Vladimirescu Tg-Jiu


Profilul Matematic-Informatic, promoia 2006

Un C.N.T.V. - ist la ... Londra


Numele meu este Drago Mihai Popescu i studiez
Matematica i Computer Science n Marea Britanie, la Kings
College London. Probabil c unele dintre posibilele ntrebri la
care muli dintre voi se gndesc sunt: De ce n strintate? De
ce Marea Britanie?
Rspunsul este foarte simplu: o experien care te
pregtete pentru via i pentru o viitoare carier.
Unele dintre primele lucruri eseniale pe care le-am
nvat n primul an de facultate sunt resposabilitatea i puterea
de adaptare la un ora nou, unde eti al nimnui la nceput.
Trebuie s recunosc ca prima lun i jumatate a fost destul de
dificil. Tot ceea ce mi sttea n minte era s cunosc ct mai mult lume i s-mi fac prieteni noi. Dar
facultatea n sine ii ofer o multitudine de oportuniti de a cunoate persoanele prin organizarea de
evenimente interactive i, poate cel mai important, prin creearea societilor (ex. Business Club,
Finance and Entrepreneurship, Computing etc.). Fiecare facultate are echipe din fiecare disciplin
sportiv (fotbal, tenis, cricket, volei, tenis de mas, rugby etc.) i particip constant n competiii.
Miercurea i smbta sunt, de obicei, zilele n care toate facultile disput meciuri ntre ele.
Eu m-am nscris la trei dintre aceste societi: Business Club, Finance and Computing, unde sunt
resposabil de stabilirea relaiilor cu companii i organizarea evenimentelor la facultate. Ins pot spune
ca Business Club-ul a fost cea mai bun alegere. Aceast societate a organizat anul acesta o excursie de
oportuniti la companiile tech din San Francisco si Silicon Valley, unde am avut ansa s cunosc cteva
persoane de la care am aflat cum se poate ncepe un business n IT si cum este, de fapt, s lucrezi ntr-un
corporate (ex. Facebook, Microsoft, Google). Pot s spun c sistemul educaional este complet diferit
fa de cel din Romnia. Facultatea ii arat cum s nvei, nu mai eti ajutat tot timpul de profesori, dar,
n schimb, ii sunt date materiale pe care le poi folosi pentru a reui s ii rezolvi seminarele sau
tutorialele. Dac ntr-adevr nu te descuri n a gsi rspunsul la o ntrebare, poi s ntrebi tutorul
personal, care te ajut nu numai cu lucruri legate de facultate, ci i n alte situaii, cum ar fi s ii scrie
recomandri pentru anumite job-uri.
Exist un Career Centre al facultii, care ii ofer tot ceea ce ii trebuie pentru a-i gsi un loc de
munc, att n timpul facultii, ct i dup terminarea acesteia. Fiecare angajator caut persoane cu o
personalitate ct mai variat, cu note bune, CV i Cover Letter bine structurate. De asemenea, poi avea
ntlniri one-on-one cu o persoan specializat n job-uri, care te va ajuta la creearea unui CV ct mai
bine organizat, ceea ce a fost i cazul meu.
23

Am cunoscut i persoane din anul doi, care m-au sftuit s aplic pentru ct mai multe stagii de
practic n bnci de investiii, stagii ce se desfurau primvara. Fiecare stagiu avea o durat de
aproximativ una-dou sptmni. Competiia era imens, dar am reuit cu un CV bine pregtit i un
interviu telefonic s fiu acceptat la dou dintre aceste programe, n cadrului departamentului de
Tehnologie la dou corporaii renumite. Problema a fost c ambele se desfurau n acelai timp i am
avut de fcut o alegere foarte grea. Acest pre-internship este o oportunitate unic de a face primul pas
spre o carier de succes. n cazul unei bune relaii de comunicare i asimiliarea ct mai multor
cunotinte n domeniul respectiv al companiei, ii va fi oferit un assessment centre, unde va trebui s ai
un interviu face-to-face bazat pe competene personale i unul tehnic, cteva exerciii de grup n care va
trebui s demonstrezi c esti capabil de iei decizii rapide i s dai dovad c eti un bun membru ntr-o
echip). Dac eti acceptat la acest stagiu, atunci pentru vara din anul 2 si 3 vei fi acceptat la un program
de internship, care, n proportie de 80%, ii va asigura un loc stabil de munc, asta dac te-ai descurcat,
bineneles.
Cred c acum este timpul totui s v povestesc i despre cum poi fi acceptat n Marea Britanie.
Poi aplica la maximum cinci faculti prin intermediul site-ului UCAS. Trebuie s ai un Personal
Statement foarte bine structurat i organizat, n care trebuie s spui de ce vrei s studiezi cursul
respectiv i ce te calific pentru a fi ales. Ii trebuie de asemenea i o scrisoarea de recomandare de la
dirigintele tu sau de la un profesor, care s reflecte activitile tale extra-colare, ct i rezultatele din
timpul anilor. n cazul n care eti acceptat, i se vor pune cteva condiii pentru a intra la facultatea
respectiv. Prima este, desigur, s ai un test de limba engleza certificat (ex: IELTS, Cambridge Advanced
sau Proficiency, TOEFL). Dup aceea, n mod normal, ar trebui s ii cear Diploma de Bacalaureat.
Fiecare facultate are condiii diferite de admintere. De exemplu,
pentru Medicina sau Arhitectur, vor trebui prezentate dosare cu
anumite lucrri.
Cred c experiena pe care am avut-o n acest an de facultate
a fost unic. Mi-am fcut muli prieteni, am reuit s m implic
destul de mult i n cateva activiti extra-colare i, cel mai
important, am nvat s fiu resposabil, organizat i s iau deciziile
potrivite n diferite situaii. Sper c n viitor s lucrez unul-doi ani la
o companie, dup care a dori s imi deschid propriul business. V
urez succes la toi i s v gndii bine la ceea ce vei face n viitor!
Dac avei ntrebri, n iulie sunt acas :D !
Drago Mihai Popescu, absolvent C.N.T.V.
Profil Matematic Informatic, promoia 2012

Un C.N.T.V. - ist la ... Comisia European


M numesc Emanuela Epure, am terminat liceul Tudor
Vladimirescu n Iunie 2004, profilul Matematic-Informatic. Pentru c mi
plcea foarte mult matematica i informatica am decis s urmez Facultatea
de Matematic-Informatic din cadrul Universitaii din Bucureti n
perioada 2004-2008.
Dar dup primul an de facultatea am decis c viaa mea nu era
suficient de complicat aa c m-am nscris la Facultatea de Turism din
cadrul Universitii Romno-Americane, urmnd n paralel cursurile celor
dou faculti.
Dar n 2006 am avut oportunitatea de a merge pentru 6 luni cu o burs de merit la Universitatea
de Studii din Trieste, Italia, Departamentul de Matematica i Informatic, unde am cunoscut studeni
din diferite ri cu obiceiuri i tradiii diferite, cu un alt mod de a gndi, cu opinii diferite, de accea am
decis, dei mai aveam facultile din Bucureti de terminat, s ma nscriu la Facultatea de Inginerie din
cadurul Universitii din Trieste. Am mers n paralel pentru un an cu anul 4 din Romnia de la
Facultatea de Matematic i Informatica i cu cea din Trieste, dar a trebuie s renun la Facultatea de
Turism pentru c mi-ar fi fost prea greu s fac 3 faculti n paralel. n 2008 dup terminarea
24

Universitii din Bucureti, m-am nscris la master la ASE Bucureti la Facultatea de Cibernetica,
Statistica i Informatica Economic, specializarea Baze de Date, mergnd n paralel cu masterul i
facultatea din Trieste, terminndu-le n 2010.
ntre timp, pentru c singura mea sursa de venit era bursa de studii de la facultatea din Italia, am
nceput s dau meditaii de matematic la elevi de liceu din Italia, s lucrez ntr-un restaurant i n
acelai timp n colaborare cu un profesor de la Universitate din Trieste cu care am scris articole n
Statistic pe care le-am publicat mpreuna la reviste din America, n general.
i pentru c mi place extaordinar de mult s cltoresc, n anii de universitate am reuit s vd
aproape ntreaga Europ i s economisesc i bani din care i-am cumparat mamei mele un apartament
de care sunt foarte mndr.
Revenind la carier, imediat dup terminarea facultii i masterului n 2010 am nceput s
lucrez la o companie internaional ESTECO ca i software architect, programnd n JAVA, la un desktop
software folosit n proporie mai mare de 50% n industria automobilistic, iar dup mai mult de un an
am lucrat i la varianta web al aceluiai software. Dar ntre timp, pentru c mie mi place s-mi complic
singur viaa, am lucrat de acas la o mobile application pentru o companie din Italia.
Din ianuarie 2013 lucrez ca i software developer pentru Comisia Europeana, Joint
Research Center (JRC) n Ispra, Italia, la 2 proiecte (INSPIRE i Air Quality System) care au ca
rezultate 2 website-uri care sunt folosite de toate statele membre ale Uniunii Europene. Acestea
mi-au dat oportunitatea de a cunoate, colabora i lucra cu persoane din toate statele membre. Cum am
ajuns s lucrez pentru Comisia European? Nu a fost deloc complicat. Am dat cteva interviuri cu cei
de la Comisie i am fost acceptat. Am renuntat la contractul permanent pe care l aveam cu job-ul
precedent doar pentru c tiam c n JRC este un mediu multicultural, foarte competitiv i stimulativ.
ntotdeauna am fost ambiioas i am tiut ce mi doresc i cred c orice tnar
ambiios, prin munc i mult pasiune pentru ceea ce face, perseveren, dar i puin
noroc poate ajunge acolo unde nu i-a imaginat vreodat.

Munii Alpi

Ras Mohamed National Park Marino

Egipt

Italia

Emanuela Epure , absolvent C.N.T.V.


Profil Matematic - Informatic

25

V. Programatorul cel viteaz 100 dintr-o lovitur !


Civa dintre elevii notri, programatori pasionai, v supun ateniei cteva probleme date
la concursuri i olimpiade colare, la care ei au obinut punctaj maxim n concurs, nsoite de
scurte comentarii, sperm lmuritoare.
Continum s-i ateptm cu soluiile la care au obinut sau vor obine punctajul maxim de
100 puncte la competiii naionale recunoscute!
Implementare placut!

Concursul
Elev

ONI 2014
POPESCU GEORGE, clasa a X-a A
Medalie de ARGINT, calificare BARAJ LOT
Timp maxim de execuie / test: 0.1s
Memorie totala disponibil / stiv: 16MB/8MB

spion1

Spionul 008 vrea s gseasc o locaie secret n jungl, avnd asupra lui un
dispozitiv de localizare. Iniial spionul se afl la intrarea n jungl pe nivelul 1 i
cu fiecare pas, el avanseaz de la nivelul i la nivelul i+1, ajungnd la locaia
secret, aflat pe ultimul nivel, n poziia u fa de marginea stng a nivelului
curent. Pentru a ajunge n locaia secret, el poate s se deplaseze cu o poziie spre
Sud-Est (codificat cu caracterul E) sau spre Sud-Vest (codificat cu caracterul V),
trecnd de pe nivelul i pe nivelul i+1 cu vitez constant. Numrul de poziii de pe
un nivel crete cu unu fa de nivelul anterior, conform imaginii alturate. Numim
traseu o succesiune format din caractereleE sau V, corespunztoare deplasrii
spionului de pe nivelul 1 la locaia secret. Pentru exemplul din figura alturat
succesiunea de caractere VEEVE reprezint un traseu ce corespunde locaiei
secrete din poziia 4 a nivelului 6.
Cerin
Cunoscnd succesiunea de caractere corespunztoare unui traseu, determinai:
a) poziia locaiei secrete de pe ultimul nivel;
b) numrul de trasee distincte pe care le poate urma spionul plecnd din poziia iniial pentru a ajunge n
locaia secret corespunztoare traseului dat. Dou trasee se consider distincte dac difer prin cel puin o
poziie.
Date de intrare
Fiierul de intrare spion1.in conine pe prima linie un numr natural p din {1,2}, iar pe a doua linie o
succesiune de caractere corespunztoare unui traseu.
Date de ieire
Dac valoarea lui p este 1, atunci se va rezolva numai punctul a) din cerin. n acest caz, fiierul de ieire
spion1.out va conine pe prima linie un numr natural ce reprezint poziia de pe nivelul final a locaiei
secrete.
Dac valoarea lui p este 2, atunci se va rezolva numai punctul b) din cerin. n acest caz, fiierul de ieire
spion1.out va conine pe prima linie un numr natural ce reprezint numrul de trasee distincte modulo
100003.
Restricii
2 lungimea irului pailor 100 000
Pentru alte 10% din teste valoarea lui p=2 i 3000 lungimea secvenei de caractere 5000.
Exemplu
spion1.in

spion1.out

Explicaii

1
VEEVE

Locaia secret este n poziia 4 de pe nivelul 6.

26

2
VEV

2
EVEVVEVEEE

210

Exist trei trasee: VVE, VEV, EVV.

Descriere soluie
Pentru punctul a) este suficient s contorizm numarul de caractere "E" .
Notm acest numr cu y. Noi vom afia y+1 deoarece pornim de pe poziia 1.
Pentru punctul b) trebuie sa observam ca numarul de drumuri este exact C(n,y); pentru a obtine cele 100 de
puncte puteam s calculm acest numar:
- descompuneam fiecare numar de la 1 la n n factori primi i retineam un vector cu puterile fiecrui
factor prim.
- analog pentru toate numerele de la 1 la y i de la 1 la n-y, doar ca puterile acestora vor fi reinute n alt
vector.
Vom calcula C(n,y) dupa formula n!/y!*(n-y)! dupa ce avem fiecare factor prim i puterea la care se afl
acesta, putem sa calculam produsul ridicand la putere logaritmic fiecare factor prim.
De asemenea, pentru o descompunere mai rapida in factori primi putem precalcula factorii primi folosind
Ciurul lui Erathostenes.
Sursa C++
# include<fstream>
# include<cstring>
# define NMAX 100005
# define MOD 100003
using namespace std;
int nrp[10010];
int p;
char s[100009];
int factn[NMAX+9],factk[NMAX+9];
int y,i,n;
int k,viz[NMAX+10];
//Cirul lui Erathostenes
void ciur()
{
int i,j;
for (i=2;i<=NMAX;++i){
if (viz[i]==0){
nrp[++k]=i;
for (j=i+i;j<=NMAX;j+=i) viz[j]=1;
}
}
}
//ridicare la putere in timp logaritmic
int lgput(int a,int b)
{
long long s;
if (b==1) return a;
if (b==2) return a*a;
if (b%2==0) s=((lgput(a,b/2)%MOD)*(lgput(a,b/2)%MOD))%MOD;
else s=a*(lgput(a,b-1)%MOD)%MOD;
return s;
}
int main()
{
ifstream f("spion.in");
ofstream g("spion.out");
f>>p;f.get();
ciur();
f.getline(s,100005);
n=strlen(s); y=0;
for (i=0;i<n;++i){

27

if (s[i]=='E') ++y;
}
//tratam puncul a)
if (p==1) {g<<y+1<<'\n';return 0;}
else
{
//tratam punctul b
//descompunem numerele de la 1 la n in factori primi
for (i=2;i<=n;++i){
int x=i;
p=1;
while (x!=1 && viz[x]==1)
{
while (x%nrp[p]==0) x=x/nrp[p],++factn[nrp[p]];
++p;
}
if (viz[x]==0) ++factn[x];
}
//descompunem numerele de la 1 la y in factori primi
for (i=2;i<=y;++i){
int x=i;
p=1;
while (x!=1 && viz[x]==1)
{
while (x%nrp[p]==0) x=x/nrp[p],++factk[nrp[p]];
++p;
}
if (viz[x]==0) ++factk[x];
}
int r=n-y;
//descompunem numerele de la 1 la n-y in factori primi
for (i=2;i<=r;++i){
int x=i;
p=1;
while (x!=1 && viz[x]==1)
{
while (x%nrp[p]==0) x=x/nrp[p],++factk[nrp[p]];
++p;
}
if (viz[x]==0) ++factk[x];
}
//facem diferenta de factori
for (i=2;i<=n;++i){
factn[i]-=factk[i];
}
long long sum=1;
//ridicam la putere in timp logaritmic fiecare factor
for (i=2;i<=n;++i){
if (factn[i]!=0) sum=(sum*lgput(i,factn[i]))%MOD;
}
g<<sum<<'\n';
}
}

Timp maxim de execuie / test: 0.6s


Memorie totala disponibil / stiv: 4MB/2MB
Olimpia DInfo a gsit o plac gravat ce conine mai multe cuvinte scrise cu semne grafice necunoscute,
fiecare cuvnt fiind format din exact 5 semne grafice. Studiind cu atenie cuvintele, a dedus c n scrierea
acestora sunt utilizate 12 semne grafice distincte i a asociat cte o liter mic din alfabetul englez fiecrui
semn. Dup asociere, a stabilit pentru fiecare semn o complexitate, scriind literele n ordinea cresctoare a
complexitilor pe care le-a stabilit anterior. Olimpia consider c aceast complexitate este cel mai potrivit
criteriu de ordonare lexicografic.

zimeria

28

Cerin
Cunoscnd ordinea semnelor i cuvintele de pe plac determinai:
a) Numrul de cuvinte distincte existente pe plac
b) irul de cuvinte ordonat lexicografic, conform criteriului formulat de Olimpia
Date de intrare
Fiierul de intrare zimeria.in conine pe prima linie un numrul natural p din {1,2}, reprezentnd varianta
cerinei de rezolvare. Pe a doua linie se afl un numr natural n reprezentnd numrul de cuvintede pe plac.
Pe a treia linie sunt scrise 12 caractere, litere mici ale alfabetului englez, care reprezint semnele codificate, n
ordinea lexicografic a semnelor. Pe fiecare dintre urmtoarele n linii se afl cte un cuvnt.
Date de ieire
Dac valoarea lui p este 1, atunci se va rezolva numai punctul a) din cerin. n acest caz, fiierul de ieire
zimeria.out va conine pe prima linie numrul de cuvinte distincte de pe plac.
Dac valoarea lui p este 2, atunci se va rezolva numai punctul b) din cerin. n acest caz, fiierul de ieire
zimeria.out va conine n linii, pe fiecare linie cte un cuvnt n ordine lexicografic, conform complexitii
stabilite de ctre Olimpia.
Restricii
n < 400000
30% din teste vor avea pe prima linie valoarea 1, iar restul de 70% din teste vor avea pe prima linie
valoarea 2.
Exemple:
zimeria.in

zimeria.out

Explicaii

1
5
qwertyuiopas
reeet
wyuty
reeet
oiopp
oiopp

Placa conine 3 cuvinte distincte.

Descriere soluie
Avem un alfabet format din exact 12 caractere si cate n cuvinte, fiecare avand 5 caractere. Observam foarte
usor ca fiecare caracter din acel alfabet poate fi inlocuit cu o cifra a uneia din bazele mai mari ca 11. Am ales
sa consideram fiecare litera din alfabetul nostru ca fiind reprezentantul unei cifre din baza 13.
Pentru exemplul 2:
6
qwertyuiopas
sapoi
sapou
wyuty

reeet
oiopp
oiopp

Vom inlocui fiecare alfabetul nostru qwertyuiopas, astfel 0123456789AB. Deci cuvantul "sapoi" se
va transforma in "BA987".
Aceste numere le vom transforma in baza 10 si apoi le vom sorta folosind un algoritm de sortare, urmand sa
retrecem vectorul cu numere sortate innapoi in baza 13, iar apoi in literele alfabetului nostru. Acestea au fost
pentru cazul al doilea.
Pentru primul caz se fac aceleasi conversii de baze, doar ca nu se sorteaza, numerele se pun intr-un vector de
aparitii iar apoi se parcurge vectorul pentru a verifica exact cate numere sunt. (Memoria ne permite acest lucru
deoarece cuvintele au maxim 5 caractere.)
Sursa C++
# include <fstream>
# include <algorithm>
using namespace std;
char alf[50],sir[50],s[50],ap[50];

29

bool viz[400005];
int v[400005],n,i,j,p;
int put[]={1,13,169,2197,28561};
//transformam numarul k din baza 13 in baza 10
void transf3(int k)
{
for (int t=0;t<5;++t){
if (ap[t]>='0' && ap[t]<='9'){
v[k]+=((ap[t]-'0')*put[4-t]);
}
else {
int x=ap[t]-'a'+10;v[k]+=(x*put[4-t]);
}
}
}
//transformam numarul k din baza 10 in baza 13
void transf10(int k)
{
int i=4;
while (v[k]>0){
int r=v[k]%13;
if (r<=9) ap[i]=(char)('0'+r);
else {
if (r==10) ap[i]='a';else ap[i]='b';
}
--i;
v[k]=v[k]/13;
}
if (i>=0) while (i>=0) ap[i]='0',--i;
}
int main()
{
fstream f("zimeria.in",ios::in);fstream g("zimeria.out",ios::out);
f>>p>>n;f.get();f.getline(sir,15);
//initializam alfabetul
alf[sir[0]-'a']='0'; alf[sir[1]-'a']='1'; alf[sir[2]-'a']='2';
alf[sir[3]-'a']='3'; alf[sir[4]-'a']='4'; alf[sir[5]-'a']='5';
alf[sir[6]-'a']='6'; alf[sir[7]-'a']='7'; alf[sir[8]-'a']='8';
alf[sir[9]-'a']='9'; alf[sir[10]-'a']='a'; alf[sir[11]-'a']='b';
for (i=1;i<=n;++i){
f.getline(s,10);
for (int j=0;j<5;++j){
ap[j]=alf[s[j]-'a'];
}
transf3(i);
//marcam numarul v[i] in vectorul de aparitii
if (viz[v[i]]==0) ++viz[v[i]];
}
if (p==1){
//tratam cazul intai al problemei
int sum=0;
for (i=0;i<=400000;++i) sum+=viz[i];
g<<sum<<'\n';
return 0;
}
else{
//tratam cel de-al doilea caz
sort(v+1,v+n+1);//sortam
for (i=1;i<=n;++i)
{
//facem conversia fiecarui nr din baza 10 la loc in cuvant pentru a afisare
transf10(i);
for (int j=0;j<5;++j)
if (ap[j]>='0' && ap[j]<='9') g<<sir[(ap[j]-'0')];

30

else {
int x=ap[j]-'a'+10; g<<sir[x];
}
g<<'\n';
}
return 0;
}

Concurs
Elev

ONI 2013
Mrgeloiu Andrei, Clasa a X- a A
MENIUNE M.E.C. / Medalie AUR
Timp maxim de execuie / test: 0.3s
Memorie totala disponibil / stiv: 16MB/8MB

aranjare

Toat lumea tie c Mirel are 2*N sticlue cu parfum aezate pe un raft cu 2*N poziii, numerotate de
la 1 la 2*N. El are N sticlue cu parfum cumprate din ar i alte N sticlue cu parfum cumprate din Frana.
Sticluele cumprate din ar sunt etichetate cu r1, r2, , rN, iar sticluele cumprate din Frana sunt etichetate
cu f1, f2, , fN. Fiecare sticlu are asociat valoarea cu care a fost cumprat.
Iniial, Mirel are aezate pe primele N poziii sticluele cumprate din ar sortate cresctor dup valoare, iar
pe urmtoarele N poziii sticluele cumprate din Frana sortate tot cresctor dup valoare. Astfel,
cele 2*N sticlue cu parfum sunt aezate n felul urmtor: r1, r2, , rN, f1, f2, , fN. Mai exact, sticlua ri se afl
pe poziia i, iar sticlua fi se afl pe poziia N+i, pentru i din intervalul [1, N].
Prietenul su cel mai bun, Marian, s-a gndit s-i fac o surpriz i s-i schimbe aranjarea sticluelor cu
parfum n urmtoarea ordine: r1, f1, r2, f2, , rN, fN. Cum Marian are dou mini, el poate face numai
urmtorul tip de operaie: ia dou sticlue cu parfum de pe raft (de pe dou poziii diferite) i le interschimb.
Cerin
Dndu-se numrul N i 2*N valori reprezentnd valoarea fiecrei sticlue cu parfum, ajutai-l pe Marian s
fac operaiile necesare pentru a schimba ordinea sticluelor cu parfum n ordinea precizat n enun.
Date de intrare
Fiierul de intrare aranjare2.in conine pe prima linie numrul N, iar pe urmtoarea linie 2*N numere naturale,
separate prin cte un spaiu. Primele N numere reprezint valorile sticluelor cumprate din ar, iar
urmtoarele N numere reprezint valorile sticluelor cumprate din Frana. Att primele N, ct i
ultimele N numere sunt sortate cresctor n funcie de valoare.
Date de ieire
Fiierul de ieire aranjare2.out va conine mai multe linii. Pe fiecare linie se vor afla dou numere
diferite x i y din intervalul [1, 2*N], semnificnd faptul c Marian trebuie s interschimbe sticlua de pe
poziia x cu sticlua de pe poziia y.
Restricii
2 N 31 000
Dac exist mai multe soluii, se poate afia oricare dintre ele. Soluia nu trebuie s fac neaprat
numrul minim de operaii.
Exemple
aranjare.in

aranjare.out Explicaii

3
1 3 5 2 3
5

2 4
3 5
3 4

n explicaia de mai jos, fiecare sticlu are numele etichetei urmat de valoarea ei
n parantez.
irul iniial este: r1(1) r2(3) r3(5) f1(2) f2(3) f3(5)
Dup prima mutare devine: r1(1) f1(2) r3(5) r2(3) f2(3) f3(5)
Dup a doua mutare devine: r1(1) f1(2) f2(3) r2(3) r3(5) f3(5)
Dup ultima mutare devine: r1(1) f1(2) r2(3) f2(3) r3(5) f3(5)

Descrierea soluiei
Se observ c valorile sticluelor din fiierul de intrare nu influeneaz cu nimic rezolvarea problemei, deci

31

putem citi doar n, numrul de sticlue.


Configuraie iniial: r1 r2 r3 rN f1 f2 f3 fN. Configuraie final: r1 f2 r2 f2 r3 f3 rN fN
inem minte pentru fiecare sticlu poziia pe care se afl:
- pentru i de la 1 la 2*N
dac pe poziia i nu avem sticlua care trebuie:
- interschimbm i i pozitia pe care se afl sticlua ce trebuie aezat pe poziia i
Complexitate: O(N)

Sursa C++
# include <fstream>
using namespace std;
ifstream f("aranjare.in");
ofstream g("aranjare.out");
int n, var[200005], poz[200005], i;
int main()
{
f>>n;
for(i=1; i<=2*n; ++i)
poz[i]=i, var[i]=i;
for(i=1; i<n; ++i){
if (var[2*i]!=n+i){
var[poz[n+i]]=var[2*i];
poz[var[2*i]]=poz[n+i];
g<<2*i<<" "<<poz[n+i]<<"\n";
}
if (var[2*i+1]!=i+1){
var[poz[i+1]]=var[2*i+1];
poz[var[2*i+1]]=poz[i+1];
g<<2*i+1<<" "<<poz[i+1]<<"\n";
}
}
return 0;
}

Timp maxim de execuie / test: 0.1s


Memorie totala disponibil / stiv: 2MB / 1MB

gradina

Pcal a reuit s duc la bun sfrit nelegerea cu boierul cruia-i fusese slug i, conform nvoielii, boierul
trebuie s-l rsplteasc dndu-i o parte din livada sa cu pomi fructiferi. Boierul este un om foarte ordonat, aa
c livada sa este un ptrat cu latura de N metri unde, pe vremuri, fuseser plantate N rnduri cu cte N pomi
fiecare. Orice pom fructifer putea fi identificat cunoscnd numrul rndului pe care se afl i poziia sa n
cadrul rndului respectiv. Cu timpul, unii pomi s-au uscat i acum mai sunt doar P pomi. Pcal trebuie s-i
delimiteze n livad o grdin ptrat cu latura de K metri.
Cerin
Cunoscnd dimensiunile livezii i grdinii, numrul pomilor din livad i poziia fiecruia, determinai
numrul maxim de pomi dintr-o grdin ptrat de latur K i numrul modurilor n care poate fi amplasat
grdina cu numrul maxim de pomi.
Date de intrare
Fiierul gradina1.in conine pe prima linie numerele naturale N P K, separate prin cte un spaiu, cu
semnificaia din enun. Pe urmtoarele P linii se afl cte 2 numere naturale Lin i Col, separate printr-un
spaiu, reprezentnd numrul rndului, respectiv poziia n rnd a fiecrui pom din livad.
Date de ieire
Fiierul gradina1.out va conine pe prima linie numrul maxim de pomi fructiferi dintr-o grdin ptrat cu
latura de K metri. Pe a doua linie va fi scris numrul de posibiliti de a amplasa grdina astfel nct s conin
numrul maxim de pomi determinat.
Restricii
2 N 1000
1 P N2
1KN
32

Exemple
gradina1.in gradina1.out Explicaii
12 10 5
4 3
5 5
6 8
7 3
7 7
8 8
9 3
9 6
10 10
11 5

5
5

Grdina
lui
Pcal
poate
avea
maximum
5
pomi
fructiferi.
Ea poate fi amplasat n 5 moduri, avnd colul stngasus de coordonate:
(5, 3), (5, 4), (5, 5), (6, 6), (7, 3)
.

Sursa C++
# include <cstdio>
using namespace std;
int i,j,n,p,k,maxx,nr,x,y,q,var;
int a[1005][1005];
int main ()
{
freopen ("gradina.in", "r", stdin);
freopen ("gradina.out", "w", stdout);
scanf ("%d%d%d", &n, &p, &k);
for (i=1; i<=p; ++i){
scanf ("%d%d", &x, &y);
a[x][y]=1;
}
for (i=1; i<=n; ++i)
for (j=1; j<=n; ++j)
a[i][j]=a[i][j]+a[i-1][j]+a[i][j-1]-a[i-1][j-1];
for (i=k; i<=n; ++i)
for (j=k; j<=n; ++j){
var=a[i][j]-a[i-k][j]-a[i][j-k]+a[i-k][j-k];
if (var>maxx) maxx=var, nr=1;
else if (var==maxx) ++nr;
}
printf ("%d\n%d\n", maxx, nr);
return 0;
}

Concursul
Elev

RoTopCoder / 26-28 aprilie 2013


Stochioiu Radu Dumitru, Clasa a XII- a B
Premiul I

Timp maxim de execuie / test: 0.2s


Memorie totala disponibil / stiv: 2MB / 1MB
Definim o -list ca fiind o mulime ordonat, finit, de elemente ntregi. -listele se noteaz astfel:
L = [x1, x2, , xn].
Pe o -list se definesc urmtoarele operaii:
[1.] Adunarea cu un scalar: dac a i L = [x1, x2, , xn], atunci: L + a = [x1 + a, x2 + a, , xn + a]
[2.] Extragerea unei sub-liste: dac L = [x1, x2, , xn], i a, b , 1 a b n, atunci: L[a:b] = [xa,
xa+1, , xb].
[3.] Diferena a dou -liste: dac L1 = [x1, x2, , xn] i L2 = [y1, y2, , ym], cu n m, definim L1 L2 = [z1, z2, , zp], unde pentru fiecare zi cu 1 zi n - m, exist q pentru care L2 = q +
L1[zi:zi+m].
Elementele z1, z2, , zp sunt ordonate cresctor.
De exemplu, dac L1 = [4, 5, 6, 7, 6, 5, 4], L2 = [0, 1, 2], iar L3 = [10, 11, 10], atunci:
[1.] L1 - L2 = [1,2], deoarece L1[1:3] = [4,5,6] = [0,1,2]+4 = L2+4, iar L1[2:4] = [5,6,7] = [0,1,2]+5 = L2+5.
[2.] L1 - L3 = [3], deoarece L1[3:5] = [6,7,6] = [10,11,10] - 4 = L3 - 4.

lambda

33

Cerin
Fiind date dou liste L1 i L2, s se calculeze diferena L1 - L2.
Date de intrare
Pe prima linie a fiierului de intrare lambda.in se afl lungimea -listei L1. Pe cea de-a doua linie se afl
elementele lui L1, separate prin spaii. Pe cea de-a treia linie se afl lungimea lui L2, iar pe cea de-a patra
linie se afl elementele liniei L2, separate prin spaii.
Date de ieire
Pe prima linie a fiierului de ieire lambda.out se afl dimensiunea -listei L1 - L2, iar pe cea de-a doua linie
elementele ei, separate prin spaii.
Restricii i precizri
Elementele listelor sunt numere naturale mai mici dect 1000. Listele au maxim 100000 de elemente.
Exemplu
lambda.in

lambda.out

7
4 5 6 7 6 5
4
3
0 1 2

2
1 2

Descriere soluie
n primul rnd s observm c soluia este de fapt numrul de poziii (i indexul lor) pentru care
diferenele dintre urmtoarele L2 elemente sunt egale cu diferenele dintre cele L2 elemente citite la
sfritul fiierului. Pentru a obine 100 de puncte este necesar un algoritm cu o complexitate liniar,
cum este KMP-ul (O(n+m)), deoarece soluia brut (naiv) nu s-ar ncadra n timp. (O(n*m)
Sursa C++
# include <iostream>
# include <cstdio>
# define maxn 100010
using namespace std;
int a[maxn],b[maxn],pi[maxn],pos[maxn],i,q,n,m,ct,ante,x;
void KMP()
{
int i,q=0;
for(i=2, pi[1]=0; i<=m; ++i){
while(q && a[q+1]!=a[i])
q=pi[q];
if(a[q+1]==a[i]) ++q;
pi[i]=q;
}
}
int main()
{
freopen("lambda.in","r",stdin);
freopen("lambda.out","w",stdout);
scanf("%d%d",&n,&ante);
for(i=1; i<n; ++i){
scanf("%d",&x);
b[i]=x-ante; ante=x;
}
scanf("%d%d",&m,&ante);
for(i=1; i<m; ++i){
scanf("%d",&x);
a[i]=x-ante; ante=x;
}
n--,m--;
KMP(); //FORMAREA PREFIXELOR PENTRU ALGORITMUL KMP
for(i=1; i<=n; ++i){
while(q && a[q+1]!=b[i])
q=pi[q];

34

if(a[q+1]==b[i]) ++q;
if(q==m){
q=pi[m];
pos[++ct] = i-m;
}
}
printf("%d\n", ct);
for(i=1; i<=ct; ++i)
printf("%d ", pos[i]+1);
printf("\n");
return 0;
}

Concursul
Elev

OJI 2012
Galbenu Dorin, Clasa a XII- a D
Premiul II

Timp maxim de execuie / test: 0.2s


Memorie totala disponibil / stiv: 1MB / 1MB
Pasiunea Mirunei este s coloreze. Vacana trecut i-a petrecut-o la bunica ei la ar i pentru c se cam
plictisea s-a gndit s vopseasc gardul de la casa bunicii.
Gardul este compus din N scnduri dispuse una lng alta. Miruna a gsit n garajul bunicii 5 cutii de vopsea
de culori diferite: alb, albastr, roie, verde i galben. Cnd a vopsit gardul, Miruna a respectat
urmtoarele reguli:
- Dac o scndur era vopsit cu alb, urmtoarea scndur o vopsea obligatoriu cu albastru
- Dac o scndur era vopsit cu albastru, atunci urmtoarea scndur o vopsea cu alb sau rou
- Dac o scndur era vopsit cu rou, atunci urmtoarea scndur o vopsea cu albastru sau verde
- Dac o scndur era vopsit cu verde, atunci urmtoarea scndur o vopsea cu rou sau galben
- Dac o scndur era vopsit cu galben, atunci urmtoarea scndur o vopsea obligatoriu cu verde
Dup ce a i-a terminat treaba Miruna i admira opera de art i se ntreba n cte moduri diferite ar fi putut
s vopseasc gardul bunicii.

culori

Cerin
Ajutai-o pe Miruna s gseasc rspunsul la ntrebarea sa.
Date de intrare
Fiierul culori.in conine pe prima sa linie un singur numr natural N (1 N 5000).
Date de ieire
Fiierul de ieire culori.out va conine pe prima sa linie un singur numr ntreg reprezentnd numrul
de moduri diferite n care Miruna ar fi putut s vopseasc gardul bunicii.
Restricii i precizri:
1 N 5000;
Pentru 25% dintre teste N45.
Exemplu
culori.in
4

culori.out
24

Explicaii
Gardul poate fi vopsit astfel:
(alb,albastru,alb,albastru); (alb,albastru,rosu,albastru);
(alb,albastru,rosu,verde); (albastru,alb,albastru,alb);
(albastru,alb,albastru,rosu); (albastru,rosu,albastru,alb);
(albastru,rosu,albastru,rosu); (albastru,rosu,verde,rosu);
(albastru,rosu,verde,galben); rosu,albastru,alb,albastru);
(rosu,albastru,rosu,albastru); (rosu,albastru,rosu,verde);
(rosu,verde,rosu,albastru); (rosu,verde,rosu,verde);
(rosu,verde,galben,verde); (verde,rosu,albastru,alb);
(verde,rosu,albastru,rosu); (verde,rosu,verde,rosu);
(verde,rosu,verde,galben); (verde,galben,verde,rosu);
(verde,galben,verde,galben); (galben,verde,rosu,albastru);
(galben,verde,rosu,verde); (galben,verde,galben,verde).

35

Sursa C++
}
void creeaza(nrMare a,int x)
{ a[0]=0;
while(x)
{ a[++a[0]]=x%10;
x/=10;
}
}
void show(nrMare a)
{
for(int i=a[0];i>=1;i--)
g<<a[i];
g<<"\n";
}
void solve()
{
if(n%2==0)creeaza(a,s[2]);
else creeaza(a,s[3]);
for(int i=1;i<=n/2-1;i++)
inmulteste(a,3);
}
int main()
{
s[1]=5; s[2]=8; s[3]=14;
read(); solve(); show(a);
return 0;}

#include<iostream>
#include<fstream>
#define lmax 200
#define nmax 5005
using namespace std;
typedef int nrMare[lmax];
ifstream f("culori1.in");
ofstream g("culori1.out");
int s[10],n;
nrMare a;
void read()
{ f>>n;
}
void inmulteste(nrMare a, int x)
{
int t=0;
for(int i=1;i<=a[0];i++){
a[i]=a[i]*x+t;
t=a[i]/10; a[i]%=10;
}
while(t)
{ a[++a[0]]=t%10;
t/=10;
}

Descriere soluie
Putem nota:
Nr[ i, j ] = numrul de variante de a vopsii primele i scnduri, dac scndura i este vopsit cu culoarea j ( j=1,
2, 3, 4, 5)
S[ i ] = numrul de variante de a vopsi primele i scnduri din gard.
Se observ c apare urmtoarea relaie de recuren:
S[ i ] = nr[ i, 1] + nr[ i, 2] + nr[ i, 3] + nr[ i, 5]
nr[i,1]=nr[i-1,2]
nr[i,2]=nr[i-1,1]+nr[i-1,3]
nr[i,3]=nr[i-1,2]+nr[i-1,4]
nr[i,4]=nr[i-1,3]+nr[i-1,5]
nr[i,5]=nr[i-1,4]
Deoarece nr[1, j]=1, se poate vedea uor c:
nr[i, 1]= nr[i, 5], nr[i, 2]= nr[i, 4], nr[i, 3]= 2 * nr[i, 2]
Aadar:
nr[i,2]=nr[i-1,1]+nr[i-1,3]=nr[i-2,2]+2*nr[i-2,2]=3*nr[i-2,2] pentru i>2
nr[i,1]=nr[i-1,2]=3*nr[i-3,2]=3*nr[i-2,1] pentru i>4
nr[i,3]=2*nr[i-1,2]=6*nr[i-3,2]=3*nr[i-2,3] pentru i>4
S[i]= 2*nr[i,1]+2*nr[i,2]+nr[i,3] = 6*nr[i-2,1]+6*nr[i,2,2]+3*nr[i-2,3] = 3*S[i-2]
n concluzie se obine c:
S[1]=5, S[2]=8, S[3]=14
S[2k] = 3^(k-1) * S[2], pt k>1

S[2k+1] = 3^(k-1) *S[3], pt k>1


Soluia problemei este reprezentat de numrul S[n].
Pentru calcularea acestor expresii trebuie folosite numerele mari.

36

Rezultate la olimpiade i concursuri naionale


2013-2014
Olimpiada Naional de Informatic
Nr. crt.
1.
2.
3.
4.

Nume i prenume elev


Cernianu Mihai Ionu
Popescu George Aurelian
Dabelea Ioana Viviana
Stochioiu Radu Dumitru

Clasa
IX
X
V
XII

Premiul
Medalia de argint
Medalia de argint
Medalia de bronz
Medalia de bronz

Concursuri Naionale
Nr. crt.
1.
2.
3.
4.

Nume i prenume elev


Pogonaru Mihai
Comneci Andrei
Popescu George Aurelian
Popescu George Aurelian

Clasa
XI
XI
X
X

Concurs
C.N. de Soft Lugoj
C.N. de Soft Lugoj
C.N. de Soft Lugoj
PACO-Bucureti

Premiul
I
II
III
Meniune

Concursuri Internaionale
Nr. crt.
1.

Nume i prenume elev


Comneci Andrei

Clasa
XI

Concurs
Concursul
Internaional CANGUR

Premiul
II

Concursul interjudeean INFO-OLTENIA, Drobeta Turnu-Severin


Nr. crt.
1.
2.
3.
4.

Nume i prenume elev


Mrgeloiu Andrei
Comneci Andrei /
Ilie Horaiu Ovidiu
Mrgeloiu Andrei /
Cernianu Mihai Ionu
Popescu George Aurelian /
Pogonaru Mihai

Clasa
X

Premiul
III, individual

XI

I, echipaj

IX-X

Meniune, echipaj

X-XI

Meniune, echipaj

Olimpiada Judeean de Informatic


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

Nume i prenume elev


Dabelea Ioana Viviana
Bunget Andreea Maria
Cernianu Mihai Ionu
Popescu Octavian
Popescu George Aurelian
Mihai Alexandru
Mrgeloiu Andrei
Ciofu erban
Duiu Octavian
Toma Alexandru
Pogonaru Mihai
Comneci Andrei
Ilie Horaiu Ovidiu
Gogonea Andrei
Stochioiu Radu Dumitru
Galbenu Dorin

37

Clasa
V
V
IX
IX
X
X
X
X
X
X
XI
XI
XI
XI
XII
XII

Premiul
I
II
I
Meniune
I
II
III
III
Meniune
Meniune
II
III
Meniune
Meniune
I
III

Olimpiada Judeean de Tehnologia Informaiei


Nr. crt.
1.
2.
3.
4.
5.
6.

Nume i prenume elev


Enchescu Theodor Mihai
Rbonu Isabel
erbnescu Valentine
Galbenu Dorin
Mndru Raluca Bianca
Ilie Horaiu Ovidiu

Clasa
IX
IX
IX
XII
XI
XI

Premiul
II
Meniune
Meniune
I
II
III

Olimpiada Naional de Tehnologia Informaiei


Nr. crt.
1.

Nume i prenume elev


Galbenu Dorin

Clasa
XII

Premiul
Medalie de bronz

Medaliaii ONI 2014

VI. Gnduri, pasiuni, experiene


Cariera n IT, de la provocare tehnic la creativitate
Domeniul IT nu mai este o opiune manifestat naintea examenului
de bacalaureat sau de admitere la facultate. Dinamica acestei industrii a
reuit, n timp, s seteze alte cerine i ateptri din partea viitorilor
specialiti: muli ani de nvare, analiz, cercetare, gndirea mai multor
scenarii de testare, precum i antrenarea unor aptitudini antreprenoriale. n
industria IT, acestea asigur ntregirea performanelor prin viziune,
capacitatea de anticipare sau de implementare corect a tendinelor, precum
i provocarea spiritului pragmatic, extrem de necesar n aceast direcie.
i pentru c am vorbit despre ct de important este ca IT-ul s devin
un obicei, n sensul asumrii sale n totalitate ca domeniul de activitate, este
evident c demersul pornete de pe bncile colii. Este o formare continu, o
auto-modelare a elevului, o preluare a organizrii a aciunilor sale, att de
asemntoare celor pe care le folosete n algoritmii informatici. Mai mult
dect att, vorbind despre un domeniu dinamic, extrem de ofertant, IT-ul nu mai nseamn tehnica
dezvoltrii, ci i capacitatea de a privi o funcionalitate ca o potenial direcie de business,
personalizat cerinelor i trendurilor pieei. Cu siguran, acestea sunt aspecte pe care elevii nu le
aprofundeaz n timpul liceului, dar deschiderea, privirea de ansamblu, capacitatea de a vedea dincolo
de o funcie sau de un algoritm pot deveni obiective palpabile nc din ultimii ani ai liceului.
Dezvoltarea complet a unui programator sau a unui practicant n domeniul IT este tot mai mult
asociat abilitilor creative, inovatoare, un alt punct comun cu segmentul antreprenorial. Astfel,
programatorii nu mai sunt acei oameni tehnici retrai, de cele mai multe ori invizibili, care livreaz linii
de cod, dar care nu particip sub alte forme la dezvoltarea unui produs. Acum, ei ndeplinesc cu succes
38

un set complet de aptitudini precum inovaie, logic, perseveren, spirit analitic.


Am terminat liceul n anul 2005, trecnd succesiv prin mai multe etape n cariera profesional:
programator, consultant, antreprenor. n momentul de fa sunt Product Director n cadrul companiei
Avantera i fondatorul start-up-ului Softlead http://www.softlead.ro/ (prima platform din Romnia
dedicat promovrii i comercializrii de aplicaii informatice).
Andrei Dumitracu, absolvent Matematic Informatic, C.N.T.V.

Ce ncepe cu I i se termin n nformatic?


Viaa mea se mparte n dou perioade simbolice: nainte de a cunoate informatica i dup
cunoaterea ei, sau cel puin cteva din vastele-i taine. V mai
amintii coala general? S va dau un indiciu: locul acela n care
matematica domnete peste tot i toate, iar celelalte materii plesc n
faa ei. Aa mi s-a spus, aa c acesta a fost principiul dup care am
crescut. Cifre, numere, logic, improvizaie, nesiguran,
antrenament. Pn i mndria c ai rezolvat o problem naintea
tuturor celorlali te face s iubeti matematica. Am iubit-o, o iubesc,
dar... Totul devenise monoton. Trebuia s schimb ceva, aa c m-am
gndit: Ce-ar fi dac a putea s-mi programez calculatorul s-mi
fac toate calculele care mie mi ocup ntreaga zi? . ntr-adevr, a
fost cea mai inspirat ntrebare la care m puteam gndi. Parc totul era de partea mea deoarece nu a
trebuit s renun la matematic, ba chiar anumite cunotine au trebuit consolidate. Ce-i poi dori mai
mult dect s evoluezi de la o matematic rapid la una supersonic?! Informatica. Pn i numele i
dezvluie menirea sa: procesarea informaiilor, perpetua cutare i elaborare de soluii noi, pur i
simplu pofta de cunoatere capt un alt sens. Muli o vd inabordabil, inaccesibil, nefolositoare
poate, dar s-a gndit cineva vreodat ct INFORMATIC exist n fiecare moment al vieii noastre?
Viaa nu ofer a doua ans, ci te dirijeaz s i-o confecionezi singur. La fiecare greeal omul
tinde s-i urmeze paii napoi pentru a vedea ce trebuie schimbat i pentru a o lua de la nceput. Deci
ntreaga via este doar o niruire de pai (verificarea urmtoarei linii de cod), salturi (la respectiva
linie de cod) i stagnri (breakpoints). Totul se rezum ntr-un final la algoritmul folosit i cum timpul a
devenit principala moned de schimb i cel mai cutat artefact n prezent, avem nevoie de optimizri i
de complexiti ct mai mici. Lumea caut timp liber, libertate i relaxare. Nimic mai simplu: F-i un
algoritm eficient! Hai s te ajut. Prima dat, te gndeti la o abordare brut, un plan de rezerv. n
continuare, trebuie s-i foloseti toate cunotinele n domeniu i s ncerci s gseti o soluie mai
bun dect cea anterioar. Ai reuit? Continu! Nu ai reuit? Rotete-te cu un unghi i continu! Sunt
attea ci n cele 360 accesibile oricui pentru rezolvarea unei probleme, att n viaa de zi cu zi, ct i la
nivel programatic, nct tind s cred din ce n ce mai mult c unitatea structural i funcional a fiinei
umane este SOLUIA. Suntem dependeni de soluii, avem nevoie de ele, ni le dorim i n fiecare clip
ncercm s ne crem o gam ct mai vast de soluii.
Dac partea teoretic nu v-a convins, voi ncerca s v dezvlui cteva momente n care am
mbriat informatica nu numai cu mintea, ci i cu trupul i sufletul. Am participat la multe concursuri
de informatic, dar nu am fost niciodat la dou concursuri identice. De ce oare? Tot probleme,
algoritmi i btaie de cap i la deal i la vale, nu-i aa? Ei bine... NU! Informatica nu nseamn numai
nvare, cercetare i antrenament. Ea leag prietenii, i ofer ansa de a observa ali oameni i felul n
care ei gndesc. Cine nu i-a dorit de mic, uitndu-se la televizor, s ajung un mare informatician?
Oricine ar spune c n-a vrut mcar o dat s fie considerat un virtuos al descifrrii codurilor i al
calculatoarelor fie nu a gustat nc dulceaa inteligenei artificiale (dar mai este timp), fie spre ruinea
sa, minte. Primele mele concursuri de informatic au fost un adevrat rai pe pmnt. Locul I
pretutindeni, aplauze, zmbete i o recunoatere a meritelor ce m mbujora. Nu a fost nici mcar o
competiie n informatic de unde s plec fr un nou prieten, fie el i pentru o scurt durat. Am
continuat pe acest drum i, ajuns la liceu, lucrurile au devenit serioase. nfrngerile, ntr-adevr, au
devenit mai usturtoare, dar nu am lsat acest lucru s m sperie i nu regret, deoarece dup cum
oricrei aciuni i corespunde o reaciune egal i de sens opus eram sigur c voi gusta din nou fericirea
biruinei. i nu m-am nelat. nfrngerile erau mai aspre, dar victoriile INEGALABILE! Informatica a
39

devenit mai mult dect o materie. A devenit o parte din mine care cu timpul s-a tot mrit i m-a fcut
din ce n ce mai fericit. Informatica e o cale a vieii, e o alegere. Am ales i prima durere am simit-o
devreme, chiar n clasa a noua. Atunci cnd eram mai sigur pe mine, lucrurile au luat o ntorstur
nefavorabil i am rmas acas, n timp ce prietenii mei din celelalte coluri ale rii i mrturiseau la
Olimpiada Naional ultimele lor aventuri informatice. Dac pn atunci aveam nevoie de motivaie
suplimentar, ei bine, lucrurile s-au schimbat. Am lucrat, m-am distrat (tiu c nu pare credibil, dar te
simi genial atunci cnd gseti rezolvarea optim a unei probleme dificile) i am lsat timpul s
vindece rnile din primul an de liceu. Drept rsplat, anul urmtor, n clasa a X-a, am participat la
Olimpiada Nationala de Informatic din Iai. Aveam nevoie de un motiv bun pentru a merge atta drum,
nu? i nu am regretat. Imaginai-v un atlet. Nenclzit corespunztor nu va da niciodat randamentul
maxim, dar dup prima tur i dorete din ce n ce mai mult s alerge. Aa c i eu am alergat din ce n
ce mai tare, iar n clasa a XI-a nu m-am lsat ateptat la Timioara, la o nou ediie a Olimpiadei. Cine se
gndea vreodat c informatica ar putea avea vreo legtur cu sportul? N-ar trebui s dezvlui secretele
mele, ns pentru c ai fost rbdtori v pot opti unul. Nu exist zi n care s nu eliberez stresul prin
sport! Fiecare trebuie s aib o modalitate de a nltura oboseala psihic. n mod contrar, cea mai bun
prieten a mea i a multor altora, informatica, poate fi necrutoare. Totui, n ncheiere, doresc tuturor
s se bucure aa cum eu m-am bucurat i m bucur de informatic. Dai-i o singur ans i dac nu v
este pe plac, venii s m cutai pe mine.

PS: Mereu am un algoritm bine stabilit pentru a scpa de cei care vor s -mi
cear socoteal. Slav informaticii !
Radu Dumitru Stochioiu, clasa a XII-a B

Totul despre participarea mea la concursul


INFOMATRIX
Te-ai ntrebat vreodat cum e s realizezi un scurt metraj? Dac ai nevoie de un talent nnscut
pentru asta? Eu nu, pn mi s-a propus s particip la concursul Infomatrix. Acesta avea mai multe
categorii: programming, computer art, robotics, hardware control i desigur short movie, categoria la
care am i ales s participam. La categoria scurt metraj tema era impus: Ce schimbri am face n
sistemul educaional i ce probleme credem c exist n ara noastr n educaie?
Prima dat cnd eu i colega mea de echip Alexandra
Vlceanu ne-am ntlnit s lucrm pentru filmule am vrut s ne
facem un plan, s identificm problemele pe care le gsim n
sistemul educaional, dar n acelai timp s i oferim soluii la
aceste probleme, i uite aa s-au nscut dou tabere, The
Resistance reprezentnd elevii interesai de problemele pe care
le are sistemul educaional si ncearc s l schimbe, iar a doua
tabar a fost denumit Brainwash din aceasta categorie facnd
parte elevii dezinteresai de ce se ntampl n jurul lor, fiind ntrun cuvnt ignorani.
Urmtorul pas a fost s ne gndim ce imagini ar reprezenta cel mai bine cele trei probleme i
trei soluii pe care le-am gsit. i ne-am apucat s filmm n parc, la coal, acas, am filmat colegii, pe
noi. Tema a fost destul de uor de ilustrat cu puin imaginaie. Am filmat cu un aparat foto Nikon
Coolpix, nu e o camer profesional, dar filma HD i a fost mai mult decat suficient.
Montajul filmului a fost destul de complicat, pentru c l-am realizat la limit nainte de data
nscrierii. Filmuleele au fost prima dat tiate i lipite n MovieMaker acolo am pus i efecte de tranziie
de la un cadru la altul. n Adobe After Effects am pus unele efecte imagini asfel nct aceasta s par
tremurat, nceoat i cadrul s se mite. Pentru adugarea vocilor, muzici i lipirea final a
filmuleului am folosit Studio Pinnacle care a fost destul de uor de folosit volumul i durata muzici i
vocilor care fuseser nregistrate anterior, dar am descoperit c nregistrarea putea fi fcut i direct n
program, puteau fi ajustate acolo. Acesta ne oferea i nite efecte drgue pentru text i imagine. Acestea
fiind realizate aveam scurt metrajul!!
40

Filmul a fost nscris n concurs n ultima zi. Peste o sptmn fiind anunate c filmuleul s-a
calificat la etapa naional a concursului i c trebuie s mergem la Bucureti la Universitatea de SudEst Lumina, cea care organiza consursul s ne prezentam filmuleul n faa juriului n data de 5-6 aprilie.
Pentru faza national trebuiau ndeplinite anumite cerine, cum ar fi realizarea unui poster format A1
care s prezinte idea proiectului i pentru care urma s fim punctai.
La Universitate am gsit standuri pentru poster exact pe msura care ne-a fost indicat. Apoi am
ateptat ca filmuleul s fie proiectat i s rspundem la ntrebrile juriului. Au fost n total un numr de
33 de echipe din toat ara dintre care trei au reprezentat Colegiul Naional Tudor Vladimirescu:
Starry eyed format din Anca Dobrescu i Patricia Tacau care au obinut locul trei, The Believers
format din Darius Dubreu si Ileana Popescu care au obinut locul doi i echipa The Resistance
reprezentat de Alexandra Vlceanu i Diana Stnciulescu care au obinut de asemenea locul doi.
Realizarea unui scurt metraj poate fi facut de oricine i este o activitate creativ, util i distractiv n
acelai timp. Sper c v-am convins s ncercai s facei un scurt metraj i de ce nu s v nscriei, la
anul, la concursul Infomatrix. BAFT!

Stnciulescu Diana, clasa a XII-a D

Ce este Cinema 4D ?
Cum sa explic?... Ai vzut vreodata reclame sau filme care folosesc modele 3D? Ei bine acele
modele au fost realizate folosind programe de acest gen. Deci, Cinema 4D reprezint un program de
modelare tridimensionala. Un domeniu foarte interesant pentru cei ce doresc sa experimenteze cu
modele 3D.
- De ce C- 4D?
Poate ca ai auzit de alte programe care folosesc acelai concept (Maya,3D-Max etc.) dar eu
recomand folosirea Cinema-ului deoarece aduce o interfaa mai prietenoasa cu utilizatorii, nu eti
bulversat de multitudinea de butoane si funcii pe care alte programe le etaleazin meniu, ca n cele
din urma s ajungi doar cu o durere de cap.
Interfaa este minimalist prezentandu-i doar strictul necesar. Daca eti ncepator Cinema 4D
asigura un mediu mai simplu de lucru fara a afecta calitatea produsului final.
In 2013 Cinema 4D a ajuns la versiunea R14 care introduce posibilitatea de a folosi sculpting
o mbuntire semnificativ deoarece nu mai ai nevoie de programe separate pentru sculptura cum ar
fi Z-Brush, economisind bani i timp. (La ora actual R15 a ieit dar sunt prea lene s scriu i despre el)
Cinema 4D este disponibil n 4 variante:
Cinema 4D Prime este varianta cea mai ieftina care se bazeaza doar pe
modelare 3D acesta poate fi achiziionat direct de pe site-ul celor de la Maxon
la doar 995$ sau gratis n versiunea Demo pentru 30 de zile.
Cinema 4D Broadcast este o varianta mai avansata aceasta permiand crearea
obiectelor dinamice i dispune de setari pentru randare mai avansate. Cnd
vine vorba despre pre acesta crete considerabil, aceast versiune fiind
acesibil pentru 1.695$, deasemenea este gratis pentru Demo.

41

Cinema 4D Visualize este aa cum sugereaza i numele varianta pentru cei ce


doresc s creeze modele realiste, gradul de realism depinznd doar de placa
video i timpul pe care eti dispus sa l investeti n proiect. Pentru aa
performane ce mai conteaz 2.295 $!
Cinema 4D Studio reprezint tot ceea ce Maxon poate s ofere, destinat
profesionitilor aceast variant dispune de toate posibilitaile din variantele
anterioare aducand n plus character tools, generarea de pr i un phyzics
engine care va mri gradul de realism al proiectelor tale. Fiind varianta
suprem aceasta costa 3.695$ adic aproape 12000 RON!

Dac preurile te-au descurajat afl c Cinema 4D a pregtit o versiune gratis Cinema 4D Student
aceasta poate fi descrcat i folosit pentru 18 luni.
n cea ce privete acomodarea cu programul, cel mai simplu mod n care poti nvaa secretele Cinemaului este s vizitezi GrayScaleGorilla, un site foarte util. Avand numeroase videoclipuri de gen tutorial
dar i multe plugin-uri i tool-uri care te ajut s-i aduci la via ideile. Multitudinea de posibiliti pe
care le poi experimenta e limitat doar de imaginaia ta.
Timpul pe care l investeti ntr-un proiect depinde de complexitatea proiectului, placa video de
care dispui i setarile pentru randare, acestea putnd s n creasc pauza de ieit n ora de la cteva
secunde la cteva ore bune sau chiar zile n cazul n care foloseti efecte speciale cum ar fi Global
Ilumination, Ambient Oclusion i setezi Anti-Aliasing la ceva decent cum ar fi 4X. Desigur vei avea un
produs finit incredibil.
n cea ce priveste cerinele de sistem Cinema 4D nu este mofturos, acesta poate funciona i pe
un aparat ce dispune de Windows XP procesor Intel Pentium 4 i o plac video cu OpenGL 2.1 acestea
fiind cerinele minime.
Nu ai nevoie de un monstru de calculator. Eu rulez Cinema 4D Studio R14 pe un Acer Aspire
5742G cu 4G RAM, procesor Intel Core i5 2.8 GHz i placa video ATI Mobility Radeon HD 5470 de 512
Mb 64 bitzi i vreau s spun c merge impecabil, reuind s creez cteva clipuri video i proiecte:

Alien sculpting tool n ncercarea de a crea un


extraterestru

Speakers folosind light kit pro a celor de la


Grayscalegorilla i sound tool

My logo folosind Motext

Alex includerea unui element grafic n poza fratelui meu

Timex folosind poligoane complexe

Robot

Andrei Florin Popescu, clasa a X-a C

42

VII. Mici programatori ...viitori (posibil!) mari


programatori
Books (clasa a X-a)

Timp maxim de execuie: 0.6 s


Memoria total disponibil: 4 MB
O bibliotec a cumprat N cri, iar acum bibliotecarul trebuie s le sorteze i s le aranjeze pe rafturi.
Acesta a fcut o lista cu N rnduri, cte unul pentru fiecare carte, pe baza creia face sortarea. Un rnd
conine n aceast ordine: titlul, autorul, editura, anul apariiei i numrul de pagini, separate de
caracterul minus (-). Acesta a fcut o lista i cu cele M edituri ale celor N cri, prima editura din lista
fiind cea mai consacrat. Se dorete c primele cri aezate s aib editurile cele mai consacrate. Crile
care au aceeai editura sunt ordonate alfabetic (fr a face diferena ntre literele mari i mici) dup
titlu, cele care au acelai titlu dup autor, iar cele care au acelai autor dup anul apariiei. Dup sortare
crile sunt puse pe un dulap, n ordine, de la 1 la N, cte K pe un raft, de la stnga la dreapta, ncepnd
cu raftul de sus. Dac dou cri vecine au acelai numr de pagini ele fac parte din aceeai zona.
Cerin
Cunoscnd numrul de cri, numrul de edituri, coninutul listelor bibliotecarului i numrul de cri
aezate pe un raft, s se determine numrul de cri din cea mai numeroas zona.
Date de intrare
Fiierul de intrare books.in conine pe prima linie dou numere naturale N i M, separate printr-un
singur spaiu, cu semnificaia din enun. Pe urmtoarele N linii sunt informaiile despre cri aa cum
apar n lista bibliotecarului, iar pe urmtoarele M linii sunt, n ordinea descresctoare a consacrrii lor,
numele editurilor. Ultima linie conine un numr natural K, cu semnificaia din enun.
Date de ieire
Fiierul de ieire books.out va conine o singur linie pe care va fi afiat numrul de cri din cea mai
numeroas zona.
Restricii
1 N 30000
1 M 300, 10 K 100
1 anul apariiei 2014, 1 numrul de pagini 100
Titlul, autorul i editura conin cel mult 20 de caractere fiecare (litere mari i mici ale alfabetului
englez).
Nu exist dou cri care au editura, titlul, autorul i anul apariiei identice.
Se consider c toate crile au aceeai grosime.
Dou cri sunt vecine dac au cel puin un punct comun.
Exemplu
books.in

books.out

4 2
Informatica-Ionescu-Corint-2003-200
TIC-Popescu-ALL-2000-200
Informatica-Luca-ALL-2006-250
TIC-Mihai-ALL-2013-200
ALL
Corint
2

Descrierea soluiei
Soluia 1 (30 puncte):
Citim listele bibliotecarului i sortm crile folosind o funcie de comparare. Aceasta determin dintre
2 cri care are prioritate, prin parcurgerea listei cu edituri, compararea titlului i autorului cu o funtie
predefinit, ultimul criteriu fiind anul apariiei. Folosim o metod de sortare clasic n care
determinm poziia final a unui element, ce ne permite s construim simultan i matricea n care
memorm numrul de pagini. Pentru determinarea numrului maxim de cri din aceeai zona folosim
un algoritm fill.
43

Soluia 2 (100 puncte):


Folosim aceeai funcie de sortare, dar folosind o metod mai rapid. Aceasta nu permite construirea
matricei simultan cu sortarea, ns eficient sortrii permite construirea matricei separat. Aplicm apoi
acelai algoritm fill.
Soluia 3 (100 puncte):
Folosim aceeai metod rapid de sortare, dar fr construirea efectiv a matricei i adaptarea
algoritmului fill pe vector. Dei pare mai eficient ca timp dect soluia 2, deoarece nu mai construim
matricea, eficiena este diminuat de verificrile fcute n algoritmul fill. Este ns mai eficient ca
memorie (o soluie n care tipurile de date sunt folosite optim nu folosete mai mult de 2 MB memorie
totala).
Solutia 2 (100 puncte)
bool cmp(book x,book y)
{
short z=search(x.edit,y.edit);
if(z==-1)return 0;
else
if(!z){
z=stricmp(x.tit,y.tit);
if(z==1)return 0;
else if(!z){
z=stricmp(x.aut,y.aut);
if(z==1)return 0;
else if(!z)
if(x.an>y.an)return 0;
}
}
return 1;
}
void fill(short i,short j)
{
short l,kx,ky,val=b[i][j];
z++; b[i][j]=0;
for(l=0;l<8;l++){
kx=i+dx[l];
ky=j+dy[l];
if(kx&&ky&&kx<=x&&ky<=y&&
b[kx][ky]==val) fill(kx,ky);
}
}
int main()
{
read(); sort(a+1,a+n+1,cmp); x=i=1;
while(i<=n){
y++;
if(y>k){ x++; y=1;}
b[x][y]=a[i++].nr;
}
for(i=1;i<=x;i++)
for(j=1;j<=y;j++)
if(b[i][j]){
z=0; fill(i,j);
if(z>maxi) maxi=z;
}
g<<maxi; f.close();
g.close();return 0;
}

# include <fstream>
# include <cstring>
# include <cstdlib>
# include <algorithm>
using namespace std;
ifstream f("books.in");
ofstream g("books.out");
struct book{
char tit[21],aut[21],edit[21];
short an,nr;} a[30001];
short n,m,i,j,k,x,y,z,maxi,i;
short b[3001][101];
short dx[]={-1,-1,0,1,1,1,0,-1},
dy[]={0,1,1,1,0,-1,-1,-1};
char ed[301][21],s[72],*p;
void read()
{
f>>n>>m;f.get();
for(i=1;i<=n;i++){
f.getline(s,72);
p=strtok(s,"-");
strcpy(a[i].tit,p);
p=strtok(NULL,"-");
strcpy(a[i].aut,p);
p=strtok(NULL,"-");
strcpy(a[i].edit,p);
p=strtok(NULL,"-");
a[i].an=atoi(p);
p=strtok(NULL,"-");
a[i].nr=atoi(p);
}
for(i=1;i<=m;i++)
f.getline(ed[i],21);
f>>k;
}
short search(char a[],char b[])
{
short i; char x,y;
for(i=1;i<=m;i++){
x=strcmp(ed[i],a);
y=strcmp(ed[i],b);
if(!x && !y)return 0;
else if(!x) return 1;
else if(!y) return -1;
}
}

Toma Alexandru, clasa a X-a C

44

VIII. Informatic DAR ... nu numai!

Algoritmii imaginaiei
sau
Matematica ndrgostitului
uite n plan un logaritm nefericit,
din vechile necazuri ce s-au tot nmulit.
l vezi?
vreau si schimbm starea de spirit.
hai s-adunm doi logaritmi mai fericii
i s speram.
c, dac a vrea s-i fac un compliment,
i-as zice scurt i la obiect:
eti exponenial!
constant nu i clar nu liniar.
eti genial. te vd urcnd mereu,
tu nu cobori nici cnd toi dau de greu.
nva-m! arat-mi asimptotele urcrii tale
i nu vei mai fi singur, c vin i eu agale
pe urm de matrice.
oricine orice-ar zice,
orice-a determina,

cu Sarrus a pleda.
iar eu, m-a ridica doar la puterea ta
de inelegere.
nu-i o alegere, ci o prelegere.
cci eu sunt baza, iar tu eti exponentul,
renmulindu-m pe mine, mi fac
antrenamentul!
m strduiesc, m-arunc n gol,
c fac antrenament de zburtor
cu DELTAplanul printre ecuaii.
cu cifrele m am ca fraii
sari, c te voi prinde-ntr-un modul
imens, unul destul
s ajungi jos, dar nu mai treci de nul,
eti in modul!

Radu Stochioiu, clasa a XII-a B

Informatic cu rim!
Tudor Vladimirescu, acesta este liceul
Cu standarde la nivele nalte ca zmeul
Buni programatori ai rii au plecat de aici
Cci profesorii educ elevii din clasele mici
Vrei reeta succesului, i servim un algoritm,
Ajungi s-l nelegi n funcie de al tu ritm.
Dac doreti s invei nu trebuie s te simi exclus,
Ai timp oricnd s nvei limbajul C++.
i poi exprima ideile ntr-un mod original, fr probleme,
Alegnd un program dintre CSS sau HTML
MATE-INFO NU-I DOAR UN IR DE CARACTERE,
ESTE UN PROFIL COMPLEX DIN TOATE PUNCTELE DE VEDERE.

Vlad Olaru, clasa a X-a C

45

De la GOOGLE citire ...


Numele de Google este o greeala de ortografie. Iniial trebuia s se numeasc Googol, un
termen din matematic, care reprezint un numar mare, egal cu 10 100, adic 1 urmat de 100 de
zerouri. Termenul a fost inventat de Milton Sirotta, nepotul de 9 ani al matematicianului
american Edward Kasner. Motorul de cutare urma s primeasc acest nume datorit rolului
pe care-l are: de a organiza cantitatea imens de informaie disponibil pe web.
Google a nceput ca un proiect de cercetare al lui Larry Page i al lui Sergey Brin, cnd acetia
aveau 24 i respectiv 23 de ani. Site-ul Google i propune s organizeze informaiile din toat
lumea i s le fac accesibile si folositoare. Primul birou al companiei a fost ntr-un garaj, in
Menlo Park, California. Primul angajat a fost Craig Silverstein, acum Director Tehnologie.
Google primete in 2007 peste 20 de milioane de cereri n fiecare zi, din toat lumea, inclusiv
Antarctica si Vatican. Pagina de nceput apare in 116 limbi diferite, inclusiv n latin, urdu si
yoruba. De fapt, Google are cea mai mare reea de traductori din lume.
n anul 2007, ar dura 5.707 ani ca o persoana s caute n toate cele 3 miliarde de pagini ale
motorului de cutare Google. Software-ul Google o face n 0.5 secunde.
Proiectat de ctre japonezi ca o noua minune a tehnicii moderne cel mai mic calculator din lume
se prezint sub forma unui cub cu latura de aproximativ 5cm i a fost botezat inspirat de ctre
creatorii si cu numele Space Cube. Cube vine bineneles de la forma sa, iar Space trimite la
destinaia pentru care a fost creat acest mini-computer, respectiv funcionarea n spaiul cosmic.
Logo-urile care apar pe pagina de start n timpul unor zile i date marcante sau evenimente
importante se numesc Google Doodle. Compania a creat i un muzeu online n care se gsesc
toate logourile care au fost puse pn acum, cu anumite ocazii. Ele au fost create de Dennis
Hwang, un artist de origine coreana stabilit n USA.

Selectate de Ana Grecu, clasa a XII-a D

Certificri C.N.T.V. n domeniul Informaticii

https://sites.google.com/site/cntvtgjiu/

Autorii articolelelor sunt profesori, actuali i foti elevi ai Colegiului Naional Tudor Vladimirescu.
La tiprirea revistei au contribuit financiar prof. Elena Goga, prof. Gabriela Nodea,prof. Oana
Dabelea, prof. Eugen Nodea.

46

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