В чем проблема? Задача на питоне
Нужно отсортировать по количеству нефти.Единица измерения задается одной из трех букв: g (граммы), p (пуды), t (тонны), причем перед этой буквой может стоять одна из приставок: m (милли-), k (кило-), M (мега-), G (гига-).1 пуд = 16380 граммов, 1 тонна = 106 граммов.
задача 252 ацмп
in 5 234 g 4576 mp 2 t 32 mg 2 Mg
out 32 mg 234 g 4576 mp 2 t 2 Mg
вот простой код, валит 20 тест
n=int(input())
a=[]
b=[]
m=[0]*n
for i in range(n):
A, B = input().split()
A = int(A)
a.append(A)
b.append(B)
for i in range(n):
if len(b[i])==1:
if b[i][0] == 'g':
m[i] = 1
elif b[i][0] == 'p':
m[i] = 16380
else:
m[i] = 1000000
else:
if b[i][1] == 'g':
m[i] = 1
elif b[i][1] == 'p':
m[i] = 16380
else:
m[i] = 1000000
if b[i][0] == 'm':
m[i] *= 0.001
elif b[i][0] == 'k':
m[i] *= 1000
elif(b[i][0] == 'M'):
m[i] *= 1000000
else:
m[i] *= 1000000000
m[i] *= 1000*a[i]
for i in range(n-1):
for j in range(n-i-1):
if m[j] > m[j+1]:
m[j], m[j+1] = m[j+1], m[j]
a[j], a[j+1] = a[j+1], a[j]
b[j], b[j+1] = b[j+1], b[j]
for i in range(n):
print(a[i],b[i])
Ответы (1 шт):
Автор решения: Zhihar
→ Ссылка
например можно сделать так:
# функция сортировки
def sort_func(obj):
mass_prefix = {
'*': 1,
'm': 0.001,
'k': 10**3,
'M': 10**6,
'G': 10**9
}
unit_prefix = {
'g': 1,
'p': 16380,
't': 10**6
}
# определить единицы измерения и массы
unit = obj[1][-1]
mass = '*' if len(obj[1]) == 1 or obj[1][0] not in mass_prefix else obj[1][0]
# привести вес к граммам
value = obj[0] * unit_prefix[unit] * mass_prefix[mass]
return value
# получить данные от пользователя
n = int(input())
arr = input().split()
# преобразовать данные в виде списка кортежей (значение, единица измерения)
data = list(zip(map(int, arr[::2]), arr[1::2]))
# отсортировать данные
data.sort(key=sort_func)
# вывести данные в виде строки
print(*map(lambda obj: f"{obj[0]} {obj[1]}", data))
расписал чтобы было более понятно, что делает программа, на самом деле поджать код можно
P.S.
тут уже приводили неработающие тесты, потому что данные можно вводить в несколько строк и т.д. - я это не учитывал сейчас, но автору лучше учесть