Терминалы ** вокзале Оценка за задачу: 35 баллов ** вокзале установлено N типов...

0 голосов
75 просмотров

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

Оценка за задачу: 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


Информатика (46 баллов) | 75 просмотров
0

Это олимпиада?

Дан 1 ответ
0 голосов
Правильный ответ

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 <br>         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.

(6.9k баллов)