Алгоритм действий задачиPython

Программы на Python
Ответить
Anonymous
 Алгоритм действий задачи

Сообщение Anonymous »

Торговля акциями
В настоящее время на бирже активно используются компьютерные системы для торговли акциями, которые упрощают и автоматизируют процесс покупки и продажи акций. Некоторые из них даже позволяют торговать вообще без участия человека.
Конечно, основным критерием, по которому оцениваются такие системы, является прибыль, которую приносит торговля с их использованием. Для ее совершенствования при построении этих систем используются различные математические методы и модели.
Основная трудность создания таких систем состоит в том, что они должны каким-то образом учитывать изменение стоимости акций в будущем, а также прогнозировать его. Ваша задача несколько проще — уже известны курсы купли-продажи акций за весь период N дней, вам просто нужно разработать оптимальную стратегию продаж и покупок. При этом для простоты будем считать, что в течение этих N дней вы можете купить акции не более одного раза, а продать акции вы также можете не более одного раза.
Кроме того, будем считать, что продажа и покупка будут осуществляться только акциями одного типа. На начало этого периода у вас имеется сумма Х рублей. Для каждого из дней известна цена a (от Ask — цена предложения), по которой можно купить одну акцию, и цена b, по которой можно продать одну акцию. При этом в соответствии с действующими правилами торговли на бирже разрешается продавать и покупать только целое количество акций (например, если у вас 5 рублей, а акция стоит 2 рубля, то вы можете купить не более двух акций). Требуется написать программу, которая на основе имеющихся данных о стоимости акций в каждый день найдет оптимальную стратегию покупки и продажи акций.
Входные данные
Первая строка содержит целые числа N и X (1 ≤ N ≤ 100 000,1 ≤ X ≤ 106). Во второй строке записано N целых чисел a[1], ..., a[N]. Третья строка содержит N целых чисел b[1], ..., b[N](1 ≤ bi ≤ a ≤ 1000).
Выходные данные
В первой строке выведите максимальную сумму, которую вы можете иметь в конце рассматриваемого периода. Во второй строке выведите два числа — номер дня d[1], в который можно купить акции, и номер дня d[2], в который эти акции можно продать (должно выполняться неравенство d[2] > d[1]). Это означает, что покупается столько акций, сколько можно купить за Х рублей, а затем все они продаются. Если найденная вами стратегия не требует продажи и покупки акций, то во второй строке выведите «-1 -1». Если существует несколько вариантов оптимальной стратегии, то выведите любой из них.
Я пробовал сделать это сам:
days, cash = map(int, input().split())
buy = list(map(int, input().split()))
sell = list(map(int, input().split()))

ibest = 0 # minim
jbest = 1 # maxim
imin = 0
isFound = False

for j in range(2, days):
if buy[j - 1] < buy[imin]: imin = j - 1

profit = cash // buy[ibest] * sell[jbest] + cash % buy[ibest]
cur_profit = cash // buy[imin] * sell[j] + cash % buy[imin]

if profit < cur_profit and cur_profit > 0:
jbest = j
ibest = imin
isFound = True

if isFound:
print(cash // buy[ibest] * sell[jbest] + cash % buy[ibest])
print(ibest + 1, jbest + 1)
else:
print(cash)
print(-1, -1)

but this doesn`t work inn 1 case (WA) please help!


Подробнее здесь: https://stackoverflow.com/questions/798 ... sk-actions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»