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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2009, 12:04   #1
Alex26RusLink
Пользователь
 
Регистрация: 08.07.2009
Сообщений: 34
По умолчанию помогите решить задачу

Люди помогите плиз решить задачку либо на C++ либо на Паскале. Задача вроде не сложная, то ко длинная, но в голову что-то не лезет.

На вокзале есть K тупиков, куда прибывают электрички. Этот вокзал является их конечной станцией, поэтому электрички, прибыв, некоторое время стоят на вокзале, а потом отправляются в новый рейс (в ту сторону, откуда прибыли).
Дано расписание движения электричек, в котором для каждой электрички указано время её прибытия, а также время отправления в следующий рейс. Электрички в расписании упорядочены по времени прибытия. Поскольку вокзал - конечная станция, то электричка может стоять на нём довольно долго, в частности, электричка, которая прибывает раньше другой, отправляться обратно может значительно поздней.
Тупики пронумерованы числами от 1 до К. Когда электричка прибывает, её ставят в свободный тупик с минимальным номером. При этом если электричка из какого-то тупика отправилась в момент времени Х, то электричку, которая прибывает в момент времени Х, в этот тупик ставить нельзя, а электричку, прибывающую в момент Х+1 - можно.
Напишите программу, которая по данному расписанию для каждой электрички определит номер тупика, куда прибудет эта электричка.

Формат входных данных
Во входном файле число К - количество тупиков и число N - количество электропоездов (1<=K<=500000, 1<=N<=500000). Далее идёт N строк, в каждой из которых записано по 2 числа: время прибытия и время отправления электрички. Время задаётся натуральным числом, не превышающим 109. Никакие две электрички не прибывают в одно и то же время. Также возможно, что какая-нибудь электричка(или даже несколько) отправляются в момент прибытия какой-нибудь другой электрички Время отправления каждой электрички строго больше времени её прибытия. Все электрички упорядочены по времени прибытия. Считается что в нулевой момент времени все тупики на вокзале свободны.

Формат выходных данных
В выходной файл выведите N чисел - по одному для каждой электрички: номер тупика, куда прибудет соответствующая электричка. Если тупиков не достаточно, чтобы организовать движение электричек согласно расписанию, в выходной файл должно быть выведено два числа: первое должно равняться 0 (нулю), а второе содержать номер первой из электричек, которая не сможет прибыть на вокзал.

Всё наконец. Если кто-нибудь решит помочь, напишите программу без файлов, плиз...
Alex26RusLink вне форума Ответить с цитированием
Старый 09.07.2009, 12:22   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Заводите массив тупиков. Заполняете нулями (например), то есть обозначаем, что везде пусто.
Потом заводите двумерный массив событий. В первом столбце - время, во втором - событие. Например, если приходит поезд T, то пишем туда T, а если этот поезд отходит, то пишем -T.
Потом сортируем его.

Далее идем по этому массиву. Если какой-то поезд приходит, то проходим по массиву тупиков и ставим поезд в свободный. Если кто-то отходит, то проходим по массиву в поисках номера поезда и освобождаем тупик.

Пробуйте.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 09.07.2009, 12:50   #3
Alex26RusLink
Пользователь
 
Регистрация: 08.07.2009
Сообщений: 34
По умолчанию

мысль понял буду пробовать
Alex26RusLink вне форума Ответить с цитированием
Старый 09.07.2009, 14:10   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Я бы сделал так:
Массив тупиков с нулевыми значениями.
Потом приходит некий поезд:
1) Находим первый тупик, в котором значение меньше, чем время прибытия данного поезда
2) Записываем в этот тупик время отбытия данного поезда
В общем как-то так:
Код:
int тупик[K]; // массив тупиков
for (int поезд = 0; поезд < N; ++поезд)
{
  т = 0:
  while (тупик[т] >= время_прибытия_поезда_на_вокзал)
  {
    т++;
    if (т >= K)
    {
       // тупиков недостаточно
       return;
    }
  }
  // поезд попадает в тупик т
  тупик[т] = время_отбытия_поезда_с_вокзала;
}
pu4koff вне форума Ответить с цитированием
Старый 09.07.2009, 15:26   #5
Alex26RusLink
Пользователь
 
Регистрация: 08.07.2009
Сообщений: 34
По умолчанию

мне нравится алгоритм, ток щас опробовать его нада
Alex26RusLink вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить задачу=) Игорь777 Помощь студентам 4 29.03.2009 13:51
помогите решить задачу sunny2212 Microsoft Office Excel 0 14.03.2009 05:35
помогите решить задачу kriss123 Помощь студентам 4 18.02.2009 18:43
помогите решить задачу sverhuVniz Паскаль, Turbo Pascal, PascalABC.NET 4 25.10.2008 22:17