Башня Петя в очередной раз купил себе набор из кубиков. На этот раз он выстроил из них настоящую крепость — последовательность из 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 Решите на с++ или Python
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017
// Внимание! Если программа не работает, обновите версию!
begin
var a:array[,] of integer:=(
( 2, 1,-1, 4),
(-3, 1,-4, 1),
( 2, 1, 2, 3),
( 2, 2, 5, 4),
(-3,-1,-3, 1));
Writeln('*** Исходная матрица ***');
a.Println(3); Writeln(3*a.ColCount*'-');
var s:=a.Col(2).Where(x->Abs(x)<=3);
Writeln('Элементов ',s.Count,', их сумма равна ',s.Sum)
end.
Результат
*** Исходная матрица ***
2 1 -1 4
-3 1 -4 1
2 1 2 3
2 2 5 4
-3 -1 -3 1
Элементов 3, их сумма равна -2
2. Вариант решения "Так писали наши дедушки и так нас учат в школе"
const
m=5;
n=4;
a:array[1..m,1..n] of integer=(
( 2, 1,-1, 4),
(-3, 1,-4, 1),
( 2, 1, 2, 3),
( 2, 2, 5, 4),
(-3,-1,-3, 1));
procedure SumCol(m,k:integer; var p,s:integer);
var
i:integer;
begin
s:=0; p:=0;
for i:=1 to m do
if Abs(a[i,k])<=3 then begin
s:=s+a[i,k];
p:=p+1
end
end;
var
i,j,kol,sum:integer;
begin
Writeln('*** Исходная матрица ***');
for i:=1 to m do begin
for j:=1 to n do Write(a[i,j]:3);
Writeln
end;
for i:=1 to n do Write('---');
Writeln;
SumCol(m,3,kol,sum);
Writeln('Элементов ',kol,', их сумма равна ',sum)
end.
Результат
*** Исходная матрица ***
2 1 -1 4
-3 1 -4 1
2 1 2 3
2 2 5 4
-3 -1 -3 1
Элементов 3, их сумма равна -2
На бесконечном поле имеется вертикальная стена. Длина стены неизвестна. От верхнего конца стены вправо отходит горизонтальная стена также неизвестной длины. Робот находится в клетке, расположенной слева от нижнего края вертикальной стены.
На рисунке указан один из возможных способов расположения стен и Робота (Робот обозначен буквой «Р»).
Напишите для Робота алгоритм, закрашивающий все клетки, расположенные левее вертикальной стены и выше горизонтальной стены и прилегающие к ним. Робот должен закрасить только клетки, удовлетворяющие данному условию. Например, для приведённого выше рисунка Робот должен закрасить следующие клетки (см. рисунок).
Конечное расположение Робота может быть произвольным. Алгоритм должен решать задачу для произвольного размера поля и любого допустимого расположения стен внутри прямоугольного поля. При исполнении алгоритма Робот не должен разрушиться. Алгоритм напишите в текстовом редакторе и сохраните в текстовом файле. Название файла и каталог для сохранения Вам сообщат организаторы экзамена.