You are on page 1of 4

Bi 2.

Xp khch
Mt khch sn c N phng i ( phng cho 2 ngi ) c
nh s t 1 n N. Khi c mt on khch n thu
phng, tip tn ca khch sn s xp khch vo phng theo
quy tc sau: Mi cp khch s c xp vo phng c ch s
nh nht trong s cc phng trng. Nu s lng khch ca
on l s l th ngi cui cng ca on khch s c xp
vo phng c ch s nh nht trong s cc phng trng.
Nu khng cn phng trng, th s khch cha c phng s
c xp tun t tng ngi mt vo phng c ch s nh
nht trong s cc phng mi c mt khch ( ca on
khch n trc ). u tin tt c cc phng ca khch sn l
trng.
Yu cu: Cho trc trnh t n ca cc on khch v
s lng khch ca mi on. Hy xc nh s lng khch
trong mi phng ca khch sn.
D liu: Vo t file vn bn ROOM.INP:
- Dng u tin cha 2 s nguyn dng N ( 1 N
100) v G c ghi cch nhau bi du cch. N l s
phng ca khch sn, G l s lng on khch.
- Dng th i trong s G dng tip theo cha s lng
khch ca on khch th i ( cc on khch c
nh s theo th t n khch sn bt u t 1 ).
Gi thit rng khng c 2 on khch no n khch sn
vo cng mt thi im v tng s khch ca tt c cc
on khng vt qu sc cha ca khch sn ( 2N ).
Kt qu: Ghi ra file vn bn ROOMS.OUT N dng: Dng
th i cha s lng khch ca phng i ( 1 i N ).V d:

ROOMS.INP

ROOMS.OUT

3
3

2
0
0

Bi 2. Xp khch
Program room;
var
a,b:array [1..1000] of integer;
i,k,m,n,p,q:integer;
f:Text;
---------------------------------------------Procedure doc;
begin
Assign(f,'room.inp');
Reset(f);
Readln(f,n,m);
For i:=1 to m do
Readln(f,a[i]);
Close(f);
end;
------------------------------------------Procedure tinh;
begin
For i:=1 to m do
begin
p:=a[i];k:=0;
Repeat
k:=k+1;
if b[k]=0 then
if p>1 then begin b[k]:=2;p:=p-2;end
else begin b[k]:=1;p:=0;end;
Until (k>=n) or (p=0);
if p>0 then
begin
k:=0;
Repeat
k:=k+1;
if b[k]=1 then begin b[k]:=2;p:=p-1;end;
Until (k>=n) or (p=0);
end;
end;

end;
-----------------------------------------------Procedure ghi;
begin
Assign(f,'room.out');
Rewrite(f);
For i:=1 to n do
Writeln(f,b[i]);
Close(f);
end;
Begin
doc;
tinh;
ghi;
End.

Program xep_khach;
const fi='XEPKHACH.INP';
fo='XEPKHACH.OUT';
nmax=100;
var a,k: array[1..nmax] of byte;
n, m: byte;
{----------------------------}
procedure doc;
var f: text;
i: byte;
begin
assign(f,fi);
reset(f);
readln(f,n,m);
for i:=1 to m do readln(f,a[i]);
close(f);
end;
{--------------------------}
procedure xuli;
var p, i, j: byte;
begin
fillchar(k,sizeof(k),0);
p:=0;
for i:=1 to m do
begin
while (p<n) and (a[i]>1) do
begin

inc(p);
k[p]:=2;
dec(a[i],2);
end;
if (p<n) and (a[i]=1) then
begin
inc(p);
k[p]:=1;
end;
if (p=n) and (a[i]>0) then
for j:=1 to n do
if (k[j]=1) and (a[i]>0) then
begin
inc(k[j]);
dec(a[i]);
if a[i]=0 then break;
end;
end;
end;
{----------------------------}
procedure ghi;
var f: text;
i: byte;
begin
assign(f,fo);
rewrite(f);
for i:=1 to n do writeln(f,k[i]);
close(f);
end;
{---------------------------}
begin
doc;
xuli;
ghi;
end.

You might also like