Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
8 / 7 / 1
Регистрация: 09.03.2021
Сообщений: 49
1

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

19.08.2021, 13:43. Показов 734. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите пожалуйста дописать код, я только смог написать код который выводит максимальную защищенность крепости, а как сделать с расположением башен не могу понять
Башня
Петя в очередной раз купил себе набор из кубиков. На этот раз он выстроил из них настоящую крепость — последовательность из 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


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();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.08.2021, 13:43
Ответы с готовыми решениями:

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

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

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

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

1
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
19.08.2021, 14:00 2
Посчитать неприступность крепости
0
19.08.2021, 14:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.08.2021, 14:00
Помогаю со студенческими работами здесь

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

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

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

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

Посчитать сумму ряда для функции 1/(1-х)^2 с заданной пользователем точностью и посчитать количество элементов в сумме
Помогите пожалуйста, похожие примеры нашел, а сделать не выходит, срочно нужно(

Изменяя число i от 1 до n (без пробелов) получить число. Посчитать в нем количество каждых цифр. Посчитать общее число цифр
Дано число n меньше или равно 30 000. Изменяя число i от 1 до n будем записывать получившееся число...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru