Sunteți pe pagina 1din 5

Principiul "cutiei" lui Dirichlet n informatic Renumitul matematician Peter Gustav Lejeune Dirichlet (1805-1859) a enunat urmtorul principiu

care i poart numele: Se consider m obiecte care trebuie plasate n n cutii, precum i un numr natural k nenul cu m>kn. Atunci pentru orice astfel de plasare va exista o cutie ce va con ine cel pu in k!" obiecte. Un elev "normal" care citete prima at ace!t principiu va "ace urmtoarele ou o#!ervaii: 1. $"irmaia in principiu e!te evi ent% eoarece ac "iecare c!u ar conine cel mult k o#iecte% numrul total e o#iecte ar "i cel mult kn% eci nu toate o#iectele ar "i pla!ate& '. (analitatea emon!trrii principiului arat lip!a lui e importan (a"irmaii e ace!t )ra e )eneralitate put*n "i uor ima)inate). +rima o#!ervaie e!te total n reptit. ,n !c-im# a oua a"irmaie e!te -a.ar at& !copul articolului e "a e!te tocmai e a pune n evi en ace!t lucru% prin pre.entarea unor pro#leme ale cror re.olvri !e #a.ea. pe principiul lui /iric-let. ,n continuare% c*teva "orme ale principiului lui Dirichlet care pot "i "olo!ite n re.olvarea pro#lemelor: #eorema ". Dac n$!" obiecte% unde $ %&% sunt dispuse n n cutii% atunci cel puin o cutie va conine cel puin $!" obiecte. #eorema '. Dac p"!p'!...!pn(n!" obiecte sunt dispuse n n cutii% atunci exist o cutie $ n care s fie cel puin p$ obiecte. #eorema ). Dac m obiecte sunt dispuse n n cutii% atunci cel puin una dintre cutii conine cel puin p = n obiecte (am notat cu *x+ partea ntreag a numrului x).

m 1 +1

,bserva ie. ,n )eneral% c*n ntr-o pro#lem !e cere ! !e arate c e0i!t cel puin n elemente cu o anumit proprietate% e!te #ine ! con!i erm c e0i!t cel mult n(" elemente cu acea proprietate i% in anali.area ca.ului 1e0act n("2% !e a3un)e la !oluia pro#lemei. 4 alt "orm a principiului cutiei% care poate "i "olo!it n re.olvarea unor probleme de geometrie% e!te urmtoarea: #eorema -. Fie n plan o figur . de arie S i n figuri .i de arie Si% i/",',0, n. !tunci: a) " > "1 + " ' + ... + " n i cele n figuri .i nu pot acoperi figura .& #) Dac cele n figuri .i acoper pe .% atunci "1 + " ' + ... + " n " . 50i!t nenumrate pro#leme% unele intre ele "iin propu!e !pre re.olvare la i"erite concur!uri i olimpia e% a cror !oluie !e poate o#ine "olo!in ace!t principiu. /e aceea con!i er ca "iin util pre.entarea c*torva intre ele n acea!t lucrare. +entru nceput% pre.int c*teva aplicaii (pro#leme) care !e pot re.olva% utili.*n principiul lui /iric-let. Aplica ii ale principiului lui Dirichlet Aplica ia ". 6ie a7(a1% a'%8% an) un vector cu componente numere ntre)i. 9 !e !crie un pro)ram care ! etermine o !ecven (ai% ai:1%8% aj) cu proprietatea c ai:ai:1:8:aj 5!te multiplu e n. Solu ie. +entru a etermina o !ecven cu proprietatea in enun vom con!i era !umele: "17a1 "'7a1:a' 8 "n7a1:a':8:an. +utem avea ou ca.uri: 1) e0i!t un numr k cu 9; multiplu e n% ca. n care !ecvena cutat e!te a1%%8% ak& ') nu e0i!t !ume care ! "ie ivi.i#ile cu n. ,n ace!t ca. toate !umele au la mprirea la n re!turi ce "ac parte in mulimea <1%'%8% n-1=. /eoarece !unt n !ume i n-1 re!turi po!i#ile% atunci conform principiului lui Dirichlet% o#inem c e0i!t ou !ume% "p i "# (p>#)% care mprite la n au acelai re!t. /eci i"erena "# ?"# e!te ivi.i#il cu n i a!t"el putem lua i7p:1 i j7#.
program secventa; var a,s:array[1..100] of integer; i,j,n,k,p,q:integer; begin write('dati n='); readln(n); for i:=1 to n do begin

write('a[',i,']='); readln(a[i]); end; for i:=1 to n do begin s[i]:=0; for j:=1 to i do s[i]:=s[i]+a[j]; end; k:=0; for i:=1 to n do if s[i] mod n=0 then k:=i; if k=0 then begin for i:=1 to n 1 do for j:=i+1 to n do if s[i] mod n=s[j] mod n then begin p:=i+1; q:=j; end; for i:=p to q do write(a[i],' '); end else for i:=1 to k do write(a[i],' '); end.

Aplica ia '. Depo1it. 6ie un epo.it care are n camere% conin*n re!pective cantitile e mar" c1% c'%8% cn% care !unt numere naturale i!tincte. 9 !e !crie un pro)ram care ! etermine un )rup e camere cu proprietatea c !uma cantitilor e mar" pe care le conin !e poate mpri e0act la cele n camioane i entice care o tran!port. Date de intrare. +rima linie a "iierului e intrare CAMION.IN conine numrul natural n. Urmtoarea linie conine cele n valori ni% (i 7 1% '% 8% n) !eparate prin !paii. Date de ieire. 6iierul e ieire CAMION.OUT va conine numerele e or ine ale camerelor care aparin !oluiei. 2estric ii i preci1ri 1 @ n @ 1000& 1 @ ci @ A0000% i 7 1% '% 8% n (ci !unt numere naturale i!tincte)& /ac e0i!t mai multe !oluii% n "iier !e va !crie una !in)ur. 3xemplu
CAMION.IN ! "1 " # 1! 1$ 1 % CAMION.OUT " & '

Solu ie. 9e calculea. !umele pariale% "17c1 "'7c1:c' 88888888. "n7 c1:c':cA:8:cn. /i!tin)em ou ca.uri: a) $xist i pentru care "i este multiplu de n. $tunci )rupul e ncperi va conine ncperile av*n numerele e or ine: 1% '%8% i. #) %u exist nici o sum din cele de mai sus care s fie multiplu de %. ,n ace!t ca.% vom calcula irul e re!turi ri 7 "i mod n% i 7 1% '%...% n. Bum toate cele n re!turi !unt nenule i valorile lor !e re uc la cele n ? 1 elemente ale mulimii <1% '% 8% n ? 1=% aplic*n principul cutiei lui Dirichlet% vor e0i!ta ou re!turi e)ale. 6ie p i # oi in ici (p>#) pentru care rp 7 r#. $tunci i"erena intre !umele "# i "p e!te multiplu e n% eci !oluia pro#lemei o con!tituie ncperile p:1% p:'% 8% #. $ ic tiin c "p 7 c1 : c' : 8 : cp i "# 7 c1 : c' : 8 : cp : cp:1 : 8 : cC% calculm i"erena "# ? "p 7 c1 : c' : 8 : cp : cp:1 : 8 : cC ? (c1 : c' : 8 : cp) 7 cp:1 : 8 : cC. +ro)ramul +a!cal core!pun.tor e!te:
program dep()it; var c,s:array[1..1000] of integer; i,j,n,p1,p$,s*+:integer; begin write('dati n*+ar*l de ca+ere n='); readln(n); for i:=1 to n do begin write('c[',i,']='); readln(c[i]); end;

for i:=1 to n do s[i]:=0; , sir*ri de rest*ri a s*+el(r partiales*+:=0; ,s*+ele partialefor i:=1 to n do begin s*+:=(s*++c[i]) mod n; if s*+=0 ,daca ( s*+a partiala se divide c* nthen begin write(i,' '); ,cantitatea de +ar.a din incaperile,c1,c$,...,ci este +*ltipl* de n exit; end else if s[s*+]/00 then begin p$:=i s[s*+]; , n*+ar incaperip1:=s[s*+]+1; , pri+a incaperefor j:=1 to p$ do write(p1+j 1,' '); exit; end else s[s*+]:=i; end; readln end.

Aplica ia ). 4ultiplu. 9e un numr natural n. 9 !e )!ea!c un multiplu al lui (n !i!temul e numeraie cu #a.a 10) care ! conin oar ci"rele 0 i 1. 6iecare ci"r va aprea n multiplu cel puin o at. Date de intrare. +rima linie a "iierului e intrare 456#7P65.7% conine numrul natural n. Date de ieire. 6iierul e ieire 456#7P65.,5# va conine multiplul cerut. 2estric ii i preci1ri8 1 @ n @ A000. 3xemplu
MULTIPLU.IN ! % MULTIPLU.OUT 1111110 1000

Solu ie. +entru i71% '%...% n "ie ri re!turile mpririi la n ale numerelor "ormate in i ci"re e 1 ( e e0emplu rD e!te re!tul mpririi lui 1111111 la n). /ac e0i!t i cu ri70% atunci numrul "ormat in i e 1 e!te multiplu e n. ,n ca. contrar% toate cele n numere aparin mulimii <1% '%...% n?1= i atunci% con"orm principiului cutiei% cel puin ou intre ele coinci . 6ie i>j cu ri7rj. $tunci numrul care ncepe cu j?i e 1 i continu cu i ci"re e 0 e!te multiplu e n. Bon!i eraiile e mai !u! arat c pro#lema are ntot eauna !oluie. /in pcate% multiplul cutat poate "i "oarte mare. +ro)ramul care urmea. re.olv pro#lema pentru nA000.
program +*ltipl*; var n,i,j,k:integer; r:array[1.."000] of integer; (k:boolean; begin write ('n='); readln(n); repeat r[1]:=1; (k:=false; j:=1; hile not (k do begin j:=j+1; r[j]:=(101r[j 1]+1) mod n; i:=1; hile (i/j) and (r[i]/0r[j]) do i:=i+1; if i/j then (k:=tr!e end; for k:=1 to j i do write('1'); for k:=1 to i do write('0'); writeln; write('n='); readln(n) !ntil n/$; end.

Aplica ia -. Produs submul ime. 9e con!i er n numere naturale. 9e cere ! !e etermine o !u#mulime a lor a!t"el nc*t pro u!ul elementelor in !u#mulime ! "ie multiplu e n. Solu ie. $plicm aceleai raionamente ca i n ca.ul n care avem e a "ace cu !um n loc e pro u!.
program sirpr(d*se; "onst +a2n=1000; var a:array[1..+a2n] of l(ngint; rest:array[0..+a2n] of l(ngint;

n,i,j:w(rd; begin writeln('dati n='); readln(n); rest[0]:=1; for i:=1 to n do begin readln(a[i]); rest[i]:=rest[i 1]1a[i] mod n; if rest[i]=0 then begin write('secventa de la 1 la '); writeln(i,' este ( s(l*tie a pr(3le+ei'); exit end end; for i:=1 to n 1 do for j:=i+1 to n do if rest[i]=rest[j] then begin write('secventa de la ',i+1,' la '); writeln(j,' este ( s(l*tie a pr(3le+ei'); exit end end.

&bservaii' Ba.urile n care !e cere ca !u#mulimea ! ai# un numr minim e elemente% !au multiplul o#inut ! "ie minim !e re.olv prin alte meto e. Aplica ia 9. :ifre. 9 !e )!ea!c un multiplu al numrului natural at n care conine oar ci"rele 0 i 5. Date de intrare. +rima linie a "iierului e intrare :7.23.7% conine numrul natural n. Date de ieire. 6iierul e ieire :7.23.,5# va conine multiplul cerut. 2estric ii i preci1ri8 1 @ n @ 10000. 3xemplu
CI#$%.IN ! CI#$%.OUT '0'0'

Solu ie. Bon!i erm irul numerelor 50% 5050% 505050% 8% 5050..50 (n perec-i e E50E alipite). Fom calcula re!turile mpririi ace!tor numere la n i le vom memora n irul resti% i 7 1% '% ...% n. /ac n ace!t ir e0i!t un element restk 7 0% atunci numrul care ace!t re!t prin mprirea la n e!te numrul cerut n pro#lem. /ac toate elementele irului !unt nenule% ele aparin mulimii <1% '% 8% n ? 1=. Bon"orm principiului cutiei lui Dirichlet% cel puin ou intre ele !unt e)ale. 6ie j > i cu resti 7 restj. $tunci i"erena intre numerele care prin mprirea la n au at cele ou re!turi e)ale va con!titui numrul cerut. $ce!ta va "i e "orma: 5050850000000..00 (i ? j perec-i E50E urmate e j perec-i E00E). $l)oritmul re.olvrii pro#lemei e!te:
citeste(n); rest[1]'0 mod n; pentr! i=$,n exe"!t& '" rest[i](rest[i 1]1100+'0) mod n; da"& rest[i]=0 at!n"i scrie i perec4i de ''0' ie5ire .(r6at7 din pr(gra+ altfel j1; repet& da"& rest[j]=rest[i] at!n"i scrie i j perec4i de ''0', *r+ate de j perec4i '00' ie5ire .(r6at7 din pr(gra+ altfel jj+1 p(n& "(nd j=i; s"

Probleme propuse spre re1olvare

Problema ". ,ntr-un ma)a.in e nclminte !e a"l p perec-i e panto"i e m!uri i"erite. /in pcate panto"ii nu !unt mperec-eai in ne)li3ena v*n.torului care nu i-a pu! la loc up ce au "o!t pro#ai e clieni. F*n.torul orete ! )!ea!c oi panto"i care "ormea. o perec-e. Bare e!te numrul minim e panto"i care tre#uie cercetai pentru a "i !i)uri c !-a o#inut o perec-eG Problema '. Hmprimante. 9e con!i er m calculatoare notate cu c1% c'%...% cm i n imprimante notate prin p1% p'%...% pn. $a cum !e nt*mpl n realitate% numrul e calculatoare e!te mai mare ec*t numrul imprimantelor& nu vom impune acea!t con iie% ar pro#lema va "i intere!ant oar !u# acea!t ipote.. 9e cere ! eterminm numrul minim e le)turi calculator-imprimant a!t"el nc*t ac la un moment at n calculatoare ore!c !imultan ! !crie la imprimante% ace!t lucru ! "ie po!i#il (a ic le)turile !ta#ilite ! permite celor n calculatoare ! "olo!ea!c le)turi la imprimante i!tincte). Problema ). Boncur!. Ia un concur! e in"ormatic au participat m elevi care au avut e re.olvat n pro#leme. 9e cunoate numrul xk al elevilor care au reuit ! re.olve pro#lema k. 9 !e etermine cel mai mare numr " a!t"el nc*t ! e0i!te !i)ur cel puin un concurent care a re.olvat minim " pro#leme i ! !e etermine i numrul celor care au re.olvat cel puin " pro#leme.

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