p2192.pas
来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· PAS 代码 · 共 83 行
PAS
83 行
PROGRAM p2192;
VAR
n,code,i,j :Integer;
s :String;
pre :array['A'..'Z']of Integer;
have,satisfy :array[1..5]of Integer;
whether :array[1..5,1..20]of Boolean;
PROCEDURE makepre;
begin
pre['S']:=1;
pre['M']:=2;
pre['L']:=3;
pre['X']:=4;
pre['T']:=5;
end;
PROCEDURE Main;
var
find :Boolean;
i,leave,j,k :Integer;
done :array[1..5]of Boolean;
begin
leave:=n;
fillchar(done,sizeof(done),0);
repeat
find:=false;
for i:=1 to 5 do
if not done[i] and (have[i]>=satisfy[i]) then
begin
find:=true;
break;
end;
if find then
begin
done[i]:=true;
dec(leave,satisfy[i]);
for j:=1 to n do
if whether[i,j] then
for k:=1 to 5 do if whether[k,j] then
begin
dec(satisfy[k]);
whether[k,j]:=false;
end;
end;
until not find or (leave=0);
if leave=0 then writeln('T-shirts rock!') else
writeln('I','''','d rather not wear a shirt anyway...');
end;
BEGIN
makepre;
readln(s);
while (s<>'ENDOFINPUT') do
begin
fillchar(whether,sizeof(whether),0);
fillchar(have,sizeof(have),0);
fillchar(satisfy,sizeof(satisfy),0);
delete(s,1,6);
Val(s,n,code);
readln(s);
i:=1;
while i<=length(s) do if s[i]=' ' then delete(s,i,1) else inc(i);
for i:=1 to n do
for j:=pre[s[2*i-1]] to pre[s[2*i]] do
begin
whether[j,i]:=true;
inc(satisfy[j]);
end;
for i:=1 to 5 do read(have[i]);
readln;
readln;
Main;
readln(s);
end;
END.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?