Pascal ABC, В Контесте, не полностью проходит третья задача (превышен лимит времени), помогите сократить) Мой вариант прикреплён. var k,k1,k2,n,m,p:smallint; a:array [1..2000,1..2000] of char; input,output:text; begin assign(i...
Pascal ABC, В Контесте, не полностью проходит третья задача (превышен лимит времени), помогите сократить) Мой вариант прикреплён.
var k,k1,k2,n,m,p:smallint;
a:array [1..2000,1..2000] of char;
input,output:text;
begin
assign(input,'alligator.in'); reset(input);
assign(output,'alligator.out'); rewrite(output);
read(input,n,m);
for var i:=1 to n do begin
readln(input);
for var y:=1 to m do
read(input,a[i,y]);
end;
while p<1 do begin
for var i:=1 to n do
for var y:=1 to m do begin
if a[i,y]='W' then begin
for var j:=1 to (y-1) do
if a[i,j]='.' then k2:=k2+1;
if k2=(y-1) then begin a[i,y]:='.';
k:=k+1;
end;
k2:=0;
end;
if a[i,y]='N' then begin
for var j:=1 to (i-1) do
if a[j,y]='.' then k2:=k2+1;
if k2=(i-1) then begin
a[i,y]:='.';
k:=k+1;
end;
k2:=0;
end;
if a[i,y]='E' then begin
for var j:=m downto (y+1) do
if a[i,j]='.' then k2:=k2+1;
if k2=(m-y) then begin a[i,y]:='.';
k:=k+1;
end;
k2:=0;
end;
if a[i,y]='S' then begin
for var j:=n downto (i+1) do
if a[j,y]='.' then k2:=k2+1;
if k2=(n-i) then begin
a[i,y]:='.';
k:=k+1;
end;
k2:=0;
end;
end;
if k=0 then p:=1;
k1:=k1+k;
k:=0;
end;
write(output,k1);
close(input);
close(output);
end.
Ответ(ы) на вопрос:
Гость
Попробуйте разбить поиск на два прохода, сначала для направлений 'N' 'W',
затем для направлений 'E' 'S', хоть и будет два прохода массива, общее количество операций будет меньше, соответственно, и время выполнения будет меньше.
Вариант программы прикреплен в файле.
Не нашли ответ?
Похожие вопросы