Составьте программу для паскаль сегодня утром жюри решило добавить в вариант олимпиады еще одну, легкую . ответственный секретарь оргкомитета напечатал ее условие в одном экземпляре, и теперь ему нужно до начала олимпиады успеть сделать еще n копий. в его распоряжении имеются два ксерокса, один из которых копирует лист за х секунд, а другой – за y. (разрешается использовать как один ксерокс, так и оба одновременно. можно копировать не только с оригинала, но и с копии.) ему выяснить, какое минимальное время для этого потребуется. входные данные на вход программы поступают три натуральных числа n, x и y, разделенные пробелом (1 ≤ n ≤ 2∙108, 1 ≤ x, y ≤ 10). выходные данные выведите одно число – минимальное время в секундах, необходимое для получения n копий. метрополитен состоит из нескольких линий метро. все станции метро в городе пронумерованы натуральными числами от 1 до n. на каждой линии расположено несколько станций. если одна и та же станция расположена сразу на нескольких линиях, то она является станцией пересадки и на этой станции можно пересесть с любой линии, которая через нее проходит, на любую другую (опять же проходящую через нее). напишите программу, которая по данному вам описанию метрополитена определит, с каким минимальным числом пересадок можно добраться со станции a на станцию b. если данный метрополитен не соединяет все линии в одну систему, то может так получиться, что со станции a на станцию b добраться невозможно, в этом случае ваша программа должна это определить. входные данные сначала вводится число n — количество станций метро в городе (2≤n≤100). далее следует число m — количество линий метро (1≤m≤20). далее идет описание m линий. описание каждой линии состоит из числа pi — количество станций на этой линии (2≤pi≤50) и pi чисел, номера станций, через которые проходит линия (ни через какую станцию линия не проходит дважды). затем вводятся два различных числа: a — номер начальной станции, и b — номер станции, на которую нам нужно попасть. при этом если через станцию a проходит несколько линий, то мы можем спуститься на любую из них. так же если через станцию b проходит несколько линий, то нам не важно, по какой линии мы приедем. выходные данные выведите минимальное количество пересадок, которое нам понадобится. если добраться со станции a на станцию b невозможно, программа должна вывести одно число –1 (минус один).
Program kpa6ya;var x,y,N:integer;BEGINwriteln('x=');readln(x);writeln('y=');readln(y);writeln('N=');readln(N);if (N<1) and (N<2*108) then begin writeln('BBeguTe oT 1 go 2*108 4ucJlo N, a He ',N); readln(N); end;writeln(N/(x+y),' - BpeM9');END.
1. Начнем с создания класса "Станция", который будет хранить информацию о каждой станции метро. Для каждой станции мы будем иметь следующие поля:
- Номер станции
- Список линий, через которые проходит станция
2. Следующим шагом будет создание класса "Линия", который будет хранить информацию о каждой линии метро. Для каждой линии у нас будет следующее поле:
- Список станций, через которые проходит линия
3. Теперь мы можем приступать к созданию основной программы. Для начала нам нужно ввести данные о метро.
3.1 Введите количество станций (n) и сохраните это значение.
3.2 Введите количество линий (m) и сохраните это значение.
3.3 Создайте пустой список станций и заполните его данными о каждой станции.
3.3.1 Введите номер станции.
3.3.2 Введите количество линий, через которые проходит станция.
3.3.3 Введите номера линий, через которые проходит станция.
3.3.4 Добавьте станцию в список.
3.4 Создайте пустой список линий и заполните его данными о каждой линии.
3.4.1 Введите количество станций на линии.
3.4.2 Введите номера станций, через которые проходит линия.
3.4.3 Добавьте линию в список.
3.5 Введите номер начальной станции (a) и сохраните его.
3.6 Введите номер конечной станции (b) и сохраните его.
4. Теперь, когда мы имеем все необходимые данные, мы можем начать решать задачу.
4.1 Создайте очередь для обхода станций.
4.2 Создайте словарь для хранения информации о количестве пересадок на каждую станцию. Изначально все станции будут иметь значение "бесконечность", за исключением начальной станции, у которой значение будет равно 0.
4.3 Добавьте начальную станцию в очередь и начните обход.
4.4 Начните обход очереди.
4.4.1 Извлеките первую станцию из очереди.
4.4.2 Получите текущее количество пересадок для этой станции из словаря.
4.4.3 Пройдитесь по каждой линии, через которую проходит станция.
4.4.3.1 Получите все станции, через которые проходит эта линия.
4.4.3.2 Если какая-либо из этих станций еще не была посещена,
добавьте ее в очередь и установите количество пересадок для нее,
увеличив текущее количество пересадок на 1.
4.4.3.3 Если текущая линия проходит через конечную станцию,
остановите обход и сохраните количество пересадок.
4.4.4 Повторяйте шаги 4.4.1 - 4.4.3 до тех пор, пока очередь не станет пустой.
4.5 Если количество пересадок для конечной станции равно "бесконечность",
выведите -1, поскольку путь не существует.
Иначе, выведите количество пересадок для конечной станции.
Теперь ваша программа готова!