Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.97/32: Рейтинг темы: голосов - 32, средняя оценка - 4.97
8 / 7 / 1
Регистрация: 08.04.2021
Сообщений: 151

Посчитать неприступность крепости

07.08.2021, 16:40. Показов 6388. Ответов 21
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
Башня
Петя в очередной раз купил себе набор из кубиков. На этот раз он выстроил из них настоящую крепость — последовательность из N столбиков, высота каждого столбика составляет Ai кубиков.

Вскоре ему стало интересно, насколько его крепость защищена от жуликов и воров. Для этого он ввел понятие башни. Башней называется любая последовательность из K столбиков подряд (где K — любимое число Пети). Защищенность башни определяется как суммарная высота всех столбиков этой башни (чем она больше, тем громаднее и ужаснее она кажется), умноженная на минимум высоты столбиков башни (т.к. враги, очевидно, будут пытаться проникнуть через самое слабое место башни). Неприступность крепости определяется как сумма защищенностей каждой из башен.

Петя решил как можно скорее посчитать, какова же неприступность его крепости. Однако вскоре он понял, что недостаточно знать высоту каждого из столбиков. В зависимости от того, как сгруппировать столбики в башни, получится разный результат. В различных вариантах группировки часть столбиков могут не принадлежать ни одной из башен. Разумеется, Петя выберет то разбиение на башни, при котором неприступность будет максимальна.

Петя успешно справился со своей задачей, но теперь Правительство Флатландии решило защитить свой горный курорт. Правительство уже построило крепость из кубиков (просто кубики были побольше). Теперь вы должны помочь Правительству посчитать неприступность этой крепости. Единственная трудность состоит в том, что у Правительства было очень много денег, и поэтому крепость была построена очень длинная.

Входные данные

В первой строке содержатся число N — количество столбиков в крепости и число K — любимое число Пети (1 ≤ K ≤ N ≤ 100 000). Далее в следующей строке содержатся N целых чисел, обозначающих Ai (1 ≤ Ai ≤ 106).

Выходные данные

В первой строке выведите число Q — количество башен в оптимальном разбиении. Далее выведите Q чисел — номера первых столбиков каждой башни.

Примеры
Ввод
Вывод
8 3
1 2 3 4 1 6 7 8
2
2 6
1 1
1
1
1
2 1
1 1000000
2
1 2

Подскажите пожалуйста с алгоритмом
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.08.2021, 16:40
Ответы с готовыми решениями:

Посчитать неприступность крепости
помогите пожалуйста дописать код, я только смог написать код который выводит максимальную защищенность крепости, а как сделать с...

Посчитать неприступность крепости
Петя в очередной раз купил себе набор из кубиков. На этот раз он выстроил из них настоящую крепость — последовательность из N столбиков,...

Посчитать неприступность крепости
Башня Петя в очередной раз купил себе набор из кубиков. На этот раз он выстроил из них настоящую крепость — последовательность из N...

21
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
17.08.2021, 22:45
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от dmitrii2000 Посмотреть сообщение
Скиньте код пожалуйста
"Что, опять ?" (С) "Жил был пес."
0
9 / 8 / 1
Регистрация: 09.03.2021
Сообщений: 49
19.08.2021, 19:05
можете пожалуйста помочь?
как в этом коде, вместо вывода максимальной неприступности крепости при оптимальном расположении, вывести количество башен и их начала
C++
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
33
34
35
#include <iostream>
#include <deque>
#include <vector>
using namespace std;
int main() {
    int n, k;
    cin >> n >> k;
    vector <int> pref(n + 1, 0), a(n), res, p, prefk(n + 1, 0);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
        pref[i + 1] = pref[i] + a[i];
    }
    prefk = pref;
    deque <int> deque;
    for (int i = 0; i < n; ++i) {
        if (i >= k && deque.front() == i - k)
            deque.pop_front();
        while (deque.size() && a[deque.back()] >= a[i])
            deque.pop_back();
        deque.push_back(i);
        if (i >= k - 1) {
            res.push_back(deque.front());
            prefk[i + 1] -= pref[i + 1 - k];
            prefk[i + 1] *= a[res.back()]; 
        }
    }
    vector <int> ans;
    for (int i = k; i <= n; i++) {
        if (i - k < k - 1)
            prefk[i] = max(prefk[i - 1], prefk[i]);
        else 
            prefk[i] = max(prefk[i - 1], prefk[i - k] + prefk[i]);
    }
    cout << prefk.back();
}
Добавлено через 1 минуту
можете подсказать как в этом коде вместо оптимальной неприступности крепости вывести башни и их начала?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.08.2021, 19:05

Динамическое программирование. Посчитать неприступность крепости
C# Помогите решить задачу! Вася купил себе набор из кубиков. Он выстроил из них настоящую крепость — последовательность из N столбиков,...

Программа проверки знания даты основания Петропавловской крепости
Всем, привет!!! Напишите, пожалуйста программу проверки знания даты основания Петропавловской крепости. В случае неверного ответа...

Как подобрать код в "Крепости Кеары"?
как прйти крепость КЕАРЫ, где нужно подобрать код: 1) разрушение; 2) хаос; 3) порча; 4) увечье; 5) раздор

В заданной строке посчитать посчитать количество разных символов, входящих в эту строку
В заданной строке посчитать посчитать количество разных символов, входящих в эту строку

Посчитать в свитче посчитать пр формуле, ошибка #QNAN0 в результате
Доброго времени суток, помогите пожалуйста понять ошибку. Когда запускаю прогу, в значениях она выдает мне #QNAN0. До этого работало все...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru