Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2014, 22:54   #1
uzer2007
Пользователь
 
Регистрация: 16.01.2014
Сообщений: 15
По умолчанию челночный бег

Одним из важных видов тренировки легкоатлетов является челночный бег. Суть этого упражнения заключается в многократном прохождении одной и той же короткой дистанции в прямом и обратном направлении. Пусть была выбрана дистанция длиной L метров, в начальный момент спортсмен находится в начале дистанции и начинает бежать в направлении другого конца с постоянной скоростью 10 метров в секунду. Когда спортсмен достигнет конца или начала дистанции, он сразу же разворачивается (временем необходимым на этот разворот пренебрегаем) и бежит в противоположном направлении с той же скоростью. Длится это упражнение на протяжении T секунд. На расстоянии D от начала дистанции расположен датчик, который фиксирует появление бегуна в этой точке. Определите сколько раз во время бега будет зафиксировано появление спортсмена в точке, где находится датчик.
Формат входных данных
В единственной строке задаются три целых числа L, T и D (1 ≤ L ≤ 106, 0 ≤ T ≤ 109, 0 ≤ D ≤ L). Значение L кратно 10. Меня ума хватило на такое (это 44%), подскажите плиз, где ошибки, как его оптимизировать?
Код:
var
l,t,d,ll:longint;
k:longint;
begin
read(l,t,d);
ll:=10*t;
k:=0;
while(ll>=d) do
begin
k:=k+1;
ll:=ll-2*l+d;
if ll>=0 then k:=k+1;
ll:=ll-d;
end;
write(k);
end.
uzer2007 вне форума Ответить с цитированием
Старый 17.02.2014, 08:19   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Ну примерно так, имхо:

L - длина дистанции,
T - время бега
D - расстояние до датчика от начала дистанции
K - кол-во бегов мимо датчика

Сколько раз он пробежит дистанцию полностью - можно определить по формуле:

10 (м/с) * T - это расстояние полностью
K:=10*T div L - это сколько целых дистанций уложилось в данное расстояние - столько же раз он пробежал мимо датчика

10*T mod L - это остаток, сколько неполных дистанций (точнее, неполная дистанция одна, сколько метров из нее он пробежал).

Учтем четность полных дистанций - если число четное, то последнюю он бежит от начала, инача от конца, соответственно и сравнения дальше разные, то есть:

Если (K четное и (10*T mod L)>=D) или если (K нечетное и (L-10*T mod L)<=D) тогда K:=K+1

Как-то так
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 17.02.2014 в 08:23.
Sciv вне форума Ответить с цитированием
Старый 17.02.2014, 08:22   #3
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

По поводу кода:
1) не вижу необходимости вводить дополнительную L1, но судя по условиям, нужно добавить код проверки на кратность L десяти и на соблюдение указанных Вами же условий.
2) если в условиях задачи не указано специально, что ее нужно решать с помощью цикла - рекомендую воспользоваться паскалевской арифметикой (формулы выше) и выкинуть цикл из кода.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 17.02.2014, 14:38   #4
uzer2007
Пользователь
 
Регистрация: 16.01.2014
Сообщений: 15
По умолчанию

Я правильно вас понял?
Код:
var
l,t,d:longint;
k:longint;
begin
read(l,t,d);
if (l mod 10=0) and (t>=0)  then begin
k:=10*t div l;
if ((k mod 2=0)and(10*t mod l>=d)) or ((k mod 2<>0) and (10*t mod l>=l-d)) then k:=k+1;
end;
write(k);
end.
К сожалению это тоже только 44%. ограничения там такие 1 ≤ L ≤ 10^6, 0 ≤ T ≤ 10^9, 0 ≤ D ≤ L)/longint оправдан?
uzer2007 вне форума Ответить с цитированием
Старый 17.02.2014, 14:52   #5
uzer2007
Пользователь
 
Регистрация: 16.01.2014
Сообщений: 15
По умолчанию

Заменил тип к на word cтало 56%
uzer2007 вне форума Ответить с цитированием
Старый 17.02.2014, 14:57   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Каким образом у Вас сочетаются проценты и "сколько раз во время бега будет зафиксировано появление спортсмена в точке, где находится датчик"?

Поняли правильно, но под проверкой ввода я предполагал немного более сложную структуру:

Код:
repeat
  readln(l);
until (l mod 10=0) and (l>=1) and (l<=1000000);
ну и т.д.

И еще - L не может быть больше 1, скорее уж больше 10, инаяе это противоречит условию кратности.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 17.02.2014 в 15:01.
Sciv вне форума Ответить с цитированием
Старый 17.02.2014, 15:00   #7
uzer2007
Пользователь
 
Регистрация: 16.01.2014
Сообщений: 15
По умолчанию

Проценты, это сколько тестов проходит правильно, то есть процент "правильности решения")) Извините, за путаницу
uzer2007 вне форума Ответить с цитированием
Старый 17.02.2014, 15:02   #8
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от uzer2007 Посмотреть сообщение
Проценты, это сколько тестов проходит правильно, то есть процент "правильности решения")) Извините, за путаницу
так вы бы ссылку то на сайт давали, где проверяете, а то я думал - очередная лабораторная по программированию
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 17.02.2014, 15:45   #9
uzer2007
Пользователь
 
Регистрация: 16.01.2014
Сообщений: 15
По умолчанию

http://ejudge.ippo.dn.ua это олимпиада
uzer2007 вне форума Ответить с цитированием
Старый 17.02.2014, 16:29   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

оптимизация без комментариев
1.JPG
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц