Listing CAMPING.PAS
Program Camping;
const MaxN=365; MaxK=100; MaxM=14;
var k,m,n:Integer;
solicit:array [1..MaxN] of Integer;
{ numarul solicitarilor incepand }
{ cu ziua solicit[i] }
rezolvare:Integer;
cas_libera:array [1..MaxK] of Integer;
Function Liber(i:Integer):Integer;
var j:Integer;
begin
j:=1;
while (j<=k) and (cas_libera[j]>i)
do Inc(j);
Liber:=j
{ j este prima casuta libera incepand }
{ cu cea de a i-a zi }
end;
Procedure Citire;
var fi:Text;
i,x:Integer;
begin
Assign(fi,'CAMP.IN');
Reset(fi);
Readln(fi,k); Readln(fi,m); Readln(fi,n);
for i:=1 to MaxN do solicit[i]:=0;
for i:=1 to N do
begin
Readln(fi,x);
Inc(solicit[x])
end;
Close(fi)
end;
Procedure Scrie_rezultate;
var fo:Text;
begin
Assign(fo,'CAMP.OUT'); Rewrite(fo);
Writeln(fo,rezolvare);
Close(fo)
end;
Procedure Calculeaza;
var i,j:Integer;
begin
rezolvare:=0;
for i:=1 to MaxN do
begin
while solicit[i]>0 do
begin
j:=Liber(i);
if j<=K
then
begin
Inc(rezolvare);
Dec(solicit[i]);
cas_libera[j]:=i+m
end
else Break
end
end
end;
Begin
Citire;
Calculeaza;
Scrie_rezultate
End.