С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/165: Рейтинг темы: голосов - 165, средняя оценка - 4.59
Заблокирован

Задача "Торговля акциями"

04.07.2020, 07:54. Показов 35145. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Её условие звучит так:
В настоящее время на бирже при торговле акциями активно применяются компьютерные системы, которые упрощают и автоматизируют процесс покупки и продажи акций. Некоторые из них даже позволяют вести торговлю вообще без участия человека.
Разумеется, основным критерием, по которому такие системы оцениваются, является прибыль, которую приносит торговля с их применением. Для того, чтобы ее повысить при построении этих систем применяются различные математические методы и модели, такие, как, например, квадратичное программирование, нейронные сети, генетические алгоритмы и т. д.
Основной трудностью при создании таких систем является то, что они должны некоторым образом учитывать изменение стоимости акций в будущем, а также его прогнозировать. Ваша задача несколько проще — курсы продажи и покупки акций за весь период из n дней уже известны, необходимо лишь разработать оптимальную стратегию продаж и покупок. При этом для простоты будем считать, что за эти n дней купить акции можно не более одного раза и продать акции можно также не более одного раза.
Кроме этого, будем считать, что продажа и покупка будет осуществляться только с акциями одного типа. На начало этого периода вы располагаете суммой в x рублей. Для каждого из дней известна цена ai (от ask — цена предложения), по которой можно купить одну акцию, и цена bi (от bid — цена спроса), по которой можно одну акцию продать. При этом в соответствии с действующими правилами торгов на бирже разрешается продавать и покупать только целое число акций (например, если у вас есть 5 рублей, а акция стоит 2 рубля, то вы можете купить не более двух акций).
Требуется написать программу, которая по имеющимся данным о стоимости акций в каждый из дней, найдет оптимальную стратегию покупки и продажи акций.
Входные данные
Первая строка входного файла содержит два целых числа n и x (1 ≤ n ≤ 100000, 1 ≤ x ≤ 106).
Вторая строка входного файла содержит n целых чисел a1, . . . , aт. Третья строка входного файла содержит n целых чисел b1, . . . , bт. Для каждого индекса i (1 ≤ i ≤ n) выполняются неравенства 1 ≤ bi ≤ ai ≤ 1000.
Выходные данные
В первой строке выходного файла выведите максимальную сумму, которой вы можете обладать по окончании рассматриваемого периода. Во второй строке выведите два числа — номер дня d1, в который следует купить акции, и номер дня d2, в который эти акции следует продать (должно выполняться неравенство d2 > d1). При этом подразумевается, что покупается столько акций, сколько их можно купить на x рублей, а потом они все продаются. Если в найденной вами стратегии продавать и покупать акции не требуется, то выведите выведите во второй строке «-1 -1».
Если существует несколько вариантов оптимальной стратегии, то выведите любой из них
Примеры
Входные данные
5 1000
2 3 1 4 3
1 2 1 2 3
Выходные данные
3000
3 5
Входные данные
5 1000
10 9 8 7 6
9 8 7 6 5
Выходные данные
1000
-1 -1


Я уже испробовал кучу разных решений, но большинство из них не проходит и выдаёт неправильный ответ, но я не понимаю, где я ошибся. Вот решение, которое прошло 15% тестов (у меня наилучший результат):
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
n, x = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
minimum, i_minimum = a[0], 0
a0, b0 = -2, -2
ans = x
for i in range(1, n):
   if x // minimum * b[i] > ans:
      ans = x // minimum * b[i]
      a0 = i_minimum
      b0 = i
   if a[i] < minimum:
      minimum = a[i]
      i_minimum = i
print(ans)
print(a0 + 1, b0 + 1)
Подскажите, пожалуйста, где моя ошибка!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.07.2020, 07:54
Ответы с готовыми решениями:

Торговля акциями
В настоящее время на бирже при торговле акциями активно применяются компьютерные системы, которые упрощают и автоматизируют процесс покупки...

Торговля акциями
Торговля акциями В настоящее время на бирже при торговле акциями активно применяются компьютерные системы, которые упрощают и...

Ребята, где у меня ошибка Торговля акциями
n,x = input().split() n = int(n) x = int(x) f = 1 a = b = ibest = 0 jbest = 1 imin = 0

11
3 / 3 / 0
Регистрация: 15.06.2020
Сообщений: 44
04.07.2020, 13:22
Как вы узнаёте сколько процентов тестов ваше решение прошло?
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,925
Записей в блоге: 5
04.07.2020, 14:48
А вы можете объяснить свое решение?
0
3 / 3 / 0
Регистрация: 15.06.2020
Сообщений: 44
04.07.2020, 15:12
я тоже ещё не решил говорит, не верный ответ

Добавлено через 42 секунды
мне просто хочется понять сколько у меня не правильно тестов проходит

Добавлено через 1 минуту
А вот мой код если интересно:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
n, x = map(int, input().split())
 
a = list(map(int, input().split()))
b = list(map(int, input().split()))
 
top = x
top_buy = -1
top_sell = -1
min_a = 0
max_b = 0
max_diff = 0
 
for i in range(n):
    if a[i] <= x:
        if top_sell < i + 1:
            c = b[i:]
            max_b = max(c)
            top_sell_new = c.index(max_b) + i + 1
        if max_b - a[i] > max_diff:
            max_diff = max_b - a[i]
            min_a = a[i]
            top_buy = i + 1
            top_sell = top_sell_new
if min_a != 0:
    top = max_b * (x // min_a) + x % min_a
print(top)
print(top_buy, top_sell)
Добавлено через 1 минуту
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
n, x = map(int, input().split())
 
a = list(map(int, input().split()))
b = list(map(int, input().split()))
 
top = x
top_buy = -1
top_sell = -1
m = 0
 
for i in range(n):
    h = x // a[i]
    o = x % a[i]
    if top_sell < i + 1:
        c = b[i:]
        m = max(c)
        top_sell_new = c.index(m) + i + 1
    if m * h + o > top:
        top = m * h + o
        top_buy = i + 1
        top_sell = top_sell_new
print(top)
print(top_buy, top_sell)

А этот код работает правильно но медленно.
(Хотя я вроде всё что можно ускорил)

Добавлено через 27 секунд
???

Добавлено через 43 секунды
как узнать сколько тестов прошло?
0
2 / 2 / 0
Регистрация: 26.03.2019
Сообщений: 35
05.07.2020, 10:25
Fedor11, смотря на какой тестирующей программе.
Если это Сириус, то никак, да и вообще, чаще всего пишут кол-во пройденных и непройденных тестов, но сами тесты не пишут
1
3 / 3 / 0
Регистрация: 15.06.2020
Сообщений: 44
05.07.2020, 10:51
а на какой тест системе можно узнать кол-во пройденных тестов?
0
1 / 1 / 0
Регистрация: 03.06.2020
Сообщений: 13
06.07.2020, 13:07
На informatics
0
3 / 3 / 0
Регистрация: 15.06.2020
Сообщений: 44
07.07.2020, 16:12
Цитата Сообщение от TukTukL Посмотреть сообщение
На informatics
Спасибо!

Вы решение придумали?
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
08.07.2020, 03:19
Цитата Сообщение от Fedor11 Посмотреть сообщение
c = b[i:]
        m = max(c)
        top_sell_new = c.index(m) + i + 1
этот кусок можно считать за O(1) если предварительно посчитать за O(n),
а у вас на каждом шаге считается за O(n) в итоге алгоритм получается O(n^2)

Добавлено через 37 минут
Переделал ваш код под O(n).

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
n, x = map(int, input().split())
 
a = list(map(int, input().split()))
b = list(map(int, input().split()))
 
d = [(n-1, b[n-1])]*n
mxi = n-1  # индекс макс c i
mx = b[n-1]  # макс c i
for i in range(n-2, -1, -1):
    if b[i] > mx:
        mxi = i
        mx = b[i]
    d[i] = (mxi, mx)
 
top = x
top_buy = -1
top_sell = -1
m = 0
 
for i in range(n):
    h = x // a[i]
    o = x % a[i]
    if top_sell < i + 1:
        top_sell_new = d[i][0] + 1
 
    m = d[i][1]
    if m * h + o > top:
        top = m * h + o
        top_buy = i + 1
        top_sell = top_sell_new
print(top)
print(top_buy, top_sell)
В задаче не разбирался, просто ускорил решение. Должно работать, если изначальное решение было верным.
2
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
08.07.2020, 12:48
gurulTailan, Похоже на динамическое программирование, но 100% уверенности нет, надо вникать. Почитайте теорию.
0
3 / 3 / 0
Регистрация: 15.06.2020
Сообщений: 44
14.07.2020, 11:44
спасибо, ваш код правильно работает!


надо было только ускорить и всё!

Спасибо.
0
7 / 7 / 0
Регистрация: 29.01.2022
Сообщений: 55
19.03.2023, 22:11
Спустя 3 года

Вот мое решение:
Но есть странный костыль c n == 1
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
n, x = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
abest = 0
bbest = 1
amin = 0
if n != 1:
    for bj in range(2, n):
        if x // a[bj - 1] > x // a[amin]:
            amin = bj - 1
    
        if x // a[amin] * b[bj] + x % a[amin] > x // a[abest] * b[bbest] + x % a[
                abest]:
            abest = amin
            bbest = bj
 
if n != 1 and x // a[abest] * b[bbest] + x % a[abest] > x:
    print(x // a[abest] * b[bbest] + x % a[abest])
    print(abest + 1, bbest + 1)
else:
    print(x)
    print(-1, -1)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.03.2023, 22:11
Помогаю со студенческими работами здесь

Торговля акциями
Условие В настоящее время на бирже при торговле акциями активно применяются компьютерные системы, которые упрощают и автоматизируют...

Задача оптимизации. Торговля орехами и сушеными фруктами.
Добрый вечер! Собственно вопрос по задаче для меня не из легких.Начало есть,а завершение не поддается. Магазин, расположенный на окраине...

А вы забираете свои дивиденды ?? Управление акциями
Здравствуйте. Хочу узнать как и кто распорядился своим приватизационным ваучером. Как вы распоряжаетесь акциями ?? Начисляют ли...

[py3] Робот для автоматической торговли акциями
Напишите робота для автоматической торговли акциями на бирже. Вводится цена акций в первый, второй и т. д. дни, ноль — сигнал...

Напишите робота для автоматической торговли акциями на бирже
Напишите робота для автоматической торговли акциями на бирже. Вводится цена акций в первый, второй и т. д. дни, ноль — сигнал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru