• Терминалы на вокзале

    Оценка за задачу: 35 баллов

    На вокзале установлено N типов терминалов по продаже билетов. Количество терминалов i-го типа равно Ci.

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

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

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

    В первой строке задано три числа N, K, T - количество типов терминалов, количество пассажиров за день и время, за которое можно купить билет (1 ≤ N ≤ 10, 1 ≤ K ≤ 100000, 1 ≤ T ≤ 100000).

    Во второй строке задано N натуральных чисел C1, ..., CN - количество терминалов каждого из типов (1 ≤ Ci ≤ 100000).

    В третьей строке задано K натуральных чисел A1, ..., AK в порядке неубывания - время прихода пассажиров в секундах (0 ≤ Ai ≤ 100000).

    Формат результата

    Выведите N чисел: количество билетов, проданных в каждом типе терминалов.

    Примеры

    Входные данные

    3 6 10
    1 2 3
    0 0 1 2 10 11
    Результат работы

    2 3 1

Ответы 1

  • var   n, k, t, i, counter, j: int64;   c: array[1..10]of int64;   a: array[1..100000]of int64;   ar: array[1..10, 1..100000]of int64;   count: array[1..10]of int64;   b: boolean;  label l1;   begin   b := true;   counter := 0;   read(n, k, t);   for i := 1 to n do read(c[i]);   for i := 1 to k do read(a[i]);   l1:   while (counter <> k) do    begin     for j := 1 to n do      begin       for i := 1 to c[j] do        begin         if(ar[j, i] <= a[counter + 1]) then          begin           ar[j, i] := t + a[counter + 1];            counter := counter + 1;           count[j] := count[j] + 1;           b := false;           goto l1;         end;       end;     end;     if(b = true) then counter := counter + 1;     b := true;   end;   for i := 1 to n do write(count[i], ' '); end.
    • Автор:

      reynaldo
    • 6 лет назад
    • 0
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years