Поиск по этому блогу

четверг, 29 ноября 2018 г.

Вызов такси


Наши люди до метро на такси не ездят!
После затянувшегося совещания директор фирмы решил заказать такси, чтобы развезти сотрудников по домам. Он заказал N машин - ровно столько, сколь у него сотрудников. Однако когда они подъехали, оказалось, что у каждого водителя такси свой тариф за 1 километр.
Директор знает, какому сотруднику сколько километров от работы до дома (к сожалению, все сотрудники живут в разных направлениях, поэтому нельзя отправить двух сотрудников на одной машине). Теперь директор хочет определить, какой из сотрудников на каком такси должен поехать домой, чтобы суммарные затраты на такси (а их несет фирма) были минимальны.

Формат входных данных
Сначала во входном файле записано натуральное число N (1?N?1000) - количество сотрудников компании (совпадающее с количеством вызванных машин такси). Далее записано N чисел, задающих расстояния в километрах от работы до домов сотрудников компании (первое число - для первого сотрудника, второе - для второго и т.д.). Все расстояния - положительные целые числа, не превышающие 1000. Далее записано еще N чисел - тарифы за проезд одного километра в такси (первое число - в первой машине такси, второе - во второй и т.д.). Тарифы выражаются положительными целыми числами, не превышающими 10000.
Формат выходных данных
В выходной файл выведите N чисел. Первое число - номер такси, в которое должен сесть первый сотрудник, второе число - номер такси, в которое должен сесть второй и т.д., чтобы суммарные затраты на такси были минимальны. Если вариантов рассадки сотрудников, при которых затраты минимальны, несколько, выведите любой из них.
Примеры
d_in.txt
d_out.txt
3
10 20 30
50 20 30
1 3 2
5
10 20 1 30 30
3 3 3 2 3
1 2 3 5 4
program taxi;
   var f,f1:text;
         p,t:array [1..2,1..1000] of integer;

CLS
OPEN "d_in.txt" FOR INPUT AS #1
OPEN "d_out.txt" FOR OUTPUT AS #2
INPUT #1, n
DIM p(2, n), t(2, n)
FOR i = 1 TO n
INPUT #1, p(2, i)
p(1, i) = i
NEXT
FOR i = 1 TO n
INPUT #1, t(2, i)
t(1, i) = i
NEXT
'отсортируем массивы
'pасстояние поубыванию
FOR i = 1 TO n - 1
ma = p(2, i): mma = i
FOR j = i + 1 TO n
IF ma < p(2, j) THEN
mma = j
ma = p(2, j)
END IF
NEXT
SWAP p(1, i), p(1, mma)
SWAP p(2, i), p(2, mma)
NEXT
'тарифы по возрастанию
FOR i = 1 TO n - 1
mi = t(2, i): mmi = i
FOR j = i + 1 TO n
IF mi > t(2, j) THEN
mmi = j
mi = t(2, j)
END IF
NEXT
SWAP t(1, i), t(1, mmi)
SWAP t(2, i), t(2, mmi)
NEXT
FOR i = 1 TO n
p(2, i) = t(1, i)
NEXT
FOR i = 1 TO n - 1
mi = p(1, i): mmi = i
FOR j = i + 1 TO n
IF mi > p(1, j) THEN
mmi = j
mi = p(1, j)
END IF
NEXT
SWAP p(1, i), p(1, mmi)
SWAP p(2, i), p(2, mmi)
NEXT
FOR i = 1 TO n
PRINT #2, p(2, i);
NEXT
CLOSE #1
CLOSE #2
END
Вопросы, замечания, свои вариант решения пишите в комментариях.

Комментариев нет:

Отправить комментарий