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',  хоть и будет два прохода массива,  общее количество операций будет меньше, соответственно, и время выполнения будет меньше. Вариант программы прикреплен в файле.
Не нашли ответ?
Ответить на вопрос
Похожие вопросы