IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Помогите в оптимизации кода
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 43
Пол: Мужской
Реальное имя: Witaliy

Репутация: -  0  +


Всем привет!

У меня есть такой код:

program my;
var n,m,i,j : integer;
k,q,res : longint;
a,b: array[0..101,0..101] of byte;
begin
readln(n,m,k);
for i := 1 to n do
begin
for j := 1 to m do
read(a[i,j]);
readln;
end;
for q := 1 to k do
begin
for i := 1 to n do
begin
for j := 1 to m do
begin
if a[i,j] = 1 then
begin
b[i-1,j] := 1;
b[i+1,j] := 1;
b[i,j+1] := 1;
b[i,j-1] := 1;
end;
end;
end;
for i := 1 to n do
for j := 1 to m do
begin
if a[i,j] = 1 then
b[i,j] := 1;
if b[i,j] = 1 then a[i,j] := 1;
end;
end;
res := 0;
for i := 1 to n do
for j := 1 to m do
if a[i,j] = 1 then
inc(res);
writeln(res);
end.


Но при прохождении тестов видаёт лимит времени.
1<N,M<=100
1<=K<=1000000

Спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Я так понимаю, надо найти кол-во точек, от которых можно дойти до одной из помеченых не более чем за k шагов? Вопрос - если k больше чем n+m<=101+101=202, то автоматически всё поле достижимо, зачем такие большие ограничения на него?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Witaliy, смотри, что ты делаешь: (твой же код, но нормально отформатированный)

readln(n,m,k);
for i := 1 to n do begin
for j := 1 to m do read(a[i,j]);
readln;
end;

for q := 1 to k do begin
for i := 1 to n do begin
for j := 1 to m do begin
if a[i,j] = 1 then begin
b[i-1,j] := 1;
b[i+1,j] := 1;
b[i,j+1] := 1;
b[i,j-1] := 1;
end;
end;
end;

for i := 1 to n do
for j := 1 to m do begin
if a[i,j] = 1 then b[i,j] := 1;
if b[i,j] = 1 then a[i,j] := 1;
end;
end;

res := 0;
for i := 1 to n do
for j := 1 to m do
if a[i,j] = 1 then inc(res);
writeln(res);
, то есть цикл For Q = ... ты можешь смело выкинуть, от него ничего не зависит (Q вообще в программе нигде больше не используется)? Но мне почему-то кажется, что тебе надо не оптимизировать программу, а прежде всего добиться ее правильной работы, потому что сейчас что-то не так у тебя (что именно - сказать не могу, задания не вижу, а догадываться - неблагодарное это дело...)... А вот потом - когда исправишь, и программа заработает правильно - посмотрим, что можно сделать для ее ускорения...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Цитата(volvo @ 16.02.2009 22:25) *

Witaliy, смотри, что ты делаешь: (твой же код, но нормально отформатированный)
то есть цикл For Q = ... ты можешь смело выкинуть, от него ничего не зависит (Q вообще в программе нигде больше не используется)?


Что значит q не используется?
За один шаг цикла отмечаются все соседи помеченной области. За q шагов - все точки, до которых можно добраться за q шагов.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






всё верно
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.04.2024 2:47
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name