Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 31.10.2022
Сообщений: 8

Задача William and Robot

31.10.2022, 16:17. Показов 970. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
лимит времени на тест 1 секунда
лимит памяти на тест 256 мегабайт
ввод стандартный ввод
вывод стандартный вывод
Уильям играет в игру с роботом. В этой игре в строке находится массив из n целых чисел, пронумерованных 1,…n. n четно.

Уильям и робот по очереди выбирают целые числа из массива, начиная с Уильяма. Уильям может взять целое число из любого места в массиве, если его еще не взял ни один из игроков. Робот всегда берет самое левое невыбранное целое число (то есть то, которое имеет наименьший индекс). Игра заканчивается, когда все целые числа взяты. Оценка Уильяма — это сумма выбранных им целых чисел.

Помогите Уильяму набрать как можно больше очков.

Вход
Первая строка содержит n (1≤n≤105) — количество целых чисел в массиве.

Вторая строка содержит n целых чисел a1,…,an (1≤ai≤109), где ai — i-е целое число массива.

Выход
Выведите максимальное количество очков, которое может набрать Уильям.

Примеры
input
4
6 1 1 4
вывод
10
input
10
1 3 4 9 5 2 5 5 3 6
вывод
30
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.10.2022, 16:17
Ответы с готовыми решениями:

William and Cards
лимит времени на тест7,5 секунд лимит памяти на тест256 мегабайт вводстандартный ввод выводстандартный вывод Уильям любит играть в...

Cоставление ROBOT.TXT и METAтэга robot
1. Ещё можно host прописывать. 2. Разницы нет.

Задача Robot. Найти количество единичных квадратов, на которых робот побывал более одного раза
Задача Robot. Робот находится на плоскости, которая разбита на единичные квадраты. Робот может двигаться в четырех направлениях на...

15
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
31.10.2022, 17:02
вот, хоть какие то баллы наберешь:
Python
1
2
3
4
n = int(input())
*a, = map(int, input().split())
a.sort()
print(sum(a[n//2:]))
0
0 / 0 / 0
Регистрация: 31.10.2022
Сообщений: 8
31.10.2022, 17:10  [ТС]
Это не олимпиада, мне не важны баллы. Я хочу просто разобраться, как идеально сделать. Я уже сделал, но медленно рабоатает:
Python
1
2
3
4
5
6
7
8
9
10
11
12
import sys
n = int(sys.stdin.readline())
a = [int(x) for x in sys.stdin.readline().split()]
c=2
s=0
 
for i in range(n//2):
    mi= min(a[0:c])
    s+=mi
    c+=2
    a.remove(mi)
print(sum(a))
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
31.10.2022, 17:12
Цитата Сообщение от giknes Посмотреть сообщение
Я хочу просто разобраться
хорошо. какая сложность вашего алгоритма сейчас?
0
0 / 0 / 0
Регистрация: 31.10.2022
Сообщений: 8
31.10.2022, 17:17  [ТС]
Я не совсем понял, что значит сложность алгоритма. Если какая проблема, то ограничение по времени
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
31.10.2022, 18:10
Цитата Сообщение от giknes Посмотреть сообщение
ограничение по времени
а почему так происходит? вы понимаете?
0
0 / 0 / 0
Регистрация: 31.10.2022
Сообщений: 8
31.10.2022, 18:11  [ТС]
Предполагаю, что поиск min в масссиве слишком много времени занимает
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
31.10.2022, 18:14
не только поиск минимума, но и удаление элемента тоже "дорогая" операция.
0
0 / 0 / 0
Регистрация: 31.10.2022
Сообщений: 8
31.10.2022, 18:15  [ТС]
Я понимаю это. Но не знаю как по-другому сделать
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
31.10.2022, 18:57
ну разбирайся:
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
n = int(input())
*a, = map(int, input().split())
stack = sorted(range(n), key=lambda i: (a[i], -i))
used = [0] * n
res = 0
robot_move = 0
for _ in range(n // 2):
 
    while used[stack[-1]] != 0:
        stack.pop()
    william_move = stack.pop()
 
    used[william_move] = 1
    res += a[william_move]
 
    while used[robot_move] != 0:
        robot_move += 1
 
    used[robot_move] = 1
 
    print('Ход Уильяма:', 'индекс:', william_move + 1, 'число:', a[william_move])
    print('Ход Робота:', 'индекс:', robot_move + 1, 'число:', a[robot_move])
    print('Выбранные места в массиве:', used)
 
print('Ответ = ', res)
надеюсь нигде не ошибся.
2
0 / 0 / 0
Регистрация: 31.10.2022
Сообщений: 8
31.10.2022, 19:35  [ТС]
Спасибо за отклик! Я разобрался в вашем решении, но где-то есть ошибка
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
31.10.2022, 20:16
eaa, a = 10, 1, 20, 2
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
31.10.2022, 20:51
Red white socks, да, я уже увидел. спасибо.

Добавлено через 31 минуту
Red white socks, что то кроме дерева отрезков за n*log(n) не придумывается.

Добавлено через 1 минуту

Не по теме:

ночь, видимо пора спать))

0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
31.10.2022, 21:05
Лучший ответ Сообщение было отмечено giknes как решение

Решение

eaa, алгоритм giknes выглядит рабочим, надо только его на куче реализовать.

Добавлено через 3 минуты
Python
1
2
3
4
5
6
7
8
9
10
11
from random import randint
import heapq
 
n = 10000
a = [randint(1,10**6) for _ in range(n)]
h =[]
for i in range(n//2):
    heapq.heappush(h, a[2*i])
    heapq.heappush(h, a[2*i+1])
    heapq.heappop(h)
print(sum(h))
2
0 / 0 / 0
Регистрация: 31.10.2022
Сообщений: 8
02.11.2022, 07:28  [ТС]
Red white socks, Ни разу не видел такого модуля. Можешь сказать какие ещё модули пригождаются в решении задач?
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
02.11.2022, 09:57
giknes, желательно знать вообще какие возможности предоставляет стандартная библиотека python.
https://docs.python.org/3/library/

Что касается задач. Задачи бывают разные. Если вы подразумеваете олимпиадное программирование, то must have:
itertools, math, random, functools, collections, heapq, string, re, datetime, array, bisect, hashlib (важность примерно (очень примерно) в порядке убывания использования). Вполне мог что-то важное и пропустить.

Добавлено через 19 минут
Вообще, так неправильно.
Прежде всего надо пополнять теоретический багаж, а потом смотреть как реализовать знания на практике.
Изучаете "Искусство программирования" Кнута и "Алгоритмы" Кормен и сотоварищи, параллельно программируя рассказанные там вещи.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.11.2022, 09:57
Помогаю со студенческими работами здесь

Не работает клиент William hill. Служба поддержки бессильна
Добрый день! Обращаюсь к вам с последней надеждой! Клиент перестал работать после обновления, скрин ошибки прикреплю. В окошке ввода пароля...

Вильям Вингейт (William Wingate) заведует службой анализа рынка пиццы
Вильям Вингейт (William Wingate) заведует службой анализа рынка пиццы. О каждой пицце он записывает следующую информацию: •...

ROBOT DEMO
Здравствуйте ,помогите с проблемой пожалуйста, грузиться оперативная память практически на 96-98 процентов, из загруженных программ только...

ROBOT DEMO
Нашел вирус ROBOT DEMO

Robot Demo
Пытался скачать Roxar Tempest с торрента, там, по всей видимости, и поймал вирус. Хотел удалить с помощью adwcleaner, но он ничего не...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru