Задача, количество остановок, на которых можно пересесть с одного автобуса на другой

Пересадки

Ограничение времени 1 секунда
Ограничение памяти 64Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt

На Новом проспекте для разгрузки было решено пустить два новых автобусных маршрута на разных участках проспекта. Известны конечные остановки каждого из автобусов (от 1 до100) Определите количество остановок, на которых можно пересесть с одного автобуса на другой.

Формат входных данных

Вводятся четыре числа – номера конечных остановок сначала первого, потом второго автобуса.

Формат выходных данных

Ваша программа должна выводить одно число – искомое количество остановок.

Формат ввода

Пример ввода 1

3 6 4 2

Пример ввода 1

3 1 5 10

Формат вывода

Пример вывода 1

2

Пример вывода 2

0

Примечания

Первый пример: первый автобус ходит с 3-й остановки по 6-ю и обратно, а второй с 2-й по 4-ю и обратно. Пересесть с одного автобуса на другой можно на 3-й и 4-й остановках. Их две. Второй пример: автобусы не имеют общих остановок.

Помогите люди добрые. Я не программист, но от безысходности зарегалась на этом сайте. Еле разобралась как эта штука работает. Прошу решить задачу из олимпиады за 8 класс. Помогите тупому, невесть как попавшему на олимпиаду по информатике. Пришлите пожалуйста на паскале или питоне

Так а как не программист попал на олимпиаду? :slight_smile:


По тексту задачи нагуглилось решение, вроде бы работает.

Убрал лишнюю проверку ввода и исправил форматирование:

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)

Спасибо добрый человек, но ответ не подошел. Компьютер никак не хочет воспринимать

Так а что выдает?)

Задача: D.MOI2020_7_8 Пересадки

Компилятор: Python 3.6

Вердикт: Ошибка во время исполнения

Статус: Частичное решение

Это видимо означает, что какая-то часть тестов прошла успешно.

Ну, лучше, чем ничего :smiley:

Про это там больше нет каких-нибудь подробностей, что за ошибка?

не-а, ничего больше не пишет. И что самое интересное, мы посмотрели рейтинг участников. Только один человек смог решить эту задачу и то только на 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.