На Новом проспекте для разгрузки было решено пустить два новых автобусных маршрута на разных участках проспекта. Известны конечные остановки каждого из автобусов (от 1 до100) Определите количество остановок, на которых можно пересесть с одного автобуса на другой.
Формат входных данных
Вводятся четыре числа – номера конечных остановок сначала первого, потом второго автобуса.
Формат выходных данных
Ваша программа должна выводить одно число – искомое количество остановок.
Формат ввода
Пример ввода 1
3 6 4 2
Пример ввода 1
3 1 5 10
Формат вывода
Пример вывода 1
2
Пример вывода 2
0
Примечания
Первый пример: первый автобус ходит с 3-й остановки по 6-ю и обратно, а второй с 2-й по 4-ю и обратно. Пересесть с одного автобуса на другой можно на 3-й и 4-й остановках. Их две. Второй пример: автобусы не имеют общих остановок.
Помогите люди добрые. Я не программист, но от безысходности зарегалась на этом сайте. Еле разобралась как эта штука работает. Прошу решить задачу из олимпиады за 8 класс. Помогите тупому, невесть как попавшему на олимпиаду по информатике. Пришлите пожалуйста на паскале или питоне
По тексту задачи нагуглилось решение, вроде бы работает.
Убрал лишнюю проверку ввода и исправил форматирование:
a = int(input())
b = int(input())
c = int(input())
d = int(input())
if a > b:
a, b = b, a
if c > d:
c, d = d, c
z = 0
for i in range(a, b + 1):
for k in range(c, d + 1):
if i == k:
z = z + 1
print(z)
не-а, ничего больше не пишет. И что самое интересное, мы посмотрели рейтинг участников. Только один человек смог решить эту задачу и то только на 50 баллов. У остальных по нулям, видимо тоже в интернете не нашли
Теоретически может не хватить времени (1 сек) на тестах с большими числами, тогда надо придумать более оптимальный алгоритм, чем тупо цикл.
Но
не похоже на это.
Может быть просто входные данные надо не так читать, если они подаются прямо в виде одной строки как в примере, то так:
s = input()
a, b, c, d = [int(part) for part in s.split(' ')]
if a > b:
a, b = b, a
if c > d:
c, d = d, c
z = 0
for i in range(a, b + 1):
for k in range(c, d + 1):
if i == k:
z = z + 1
print(z)
И без циклов, тем более вложенных, спокойно можно решить. Обозначим участки [min1,max1] и [min2,max2]. Что имеется ввиду под min и max надеюсь понятно. И пусть min1<=min2.
Тогда если max1-min2<0, то нет искомых остановок. В противном случае число искомых остановок эта разница плюс единица. Из этого числа нужно вычесть max1-max2 если max1-max2>0
var
a1,a2,b1,b2,t: integer;
begin
readln(a1,a2,b1,b2);
if a1>a2 then begin t:=a1; a1:=a2; a2:=t end;
if b1>b2 then begin t:=b1; b1:=b2; b2:=t end;
if b1 > a1 then a1 := b1;
if b2 < a2 then a2 := b2;
if a1 > a2
then writeln(0)
else writeln(a2 - a1 + 1)
end.