Поделитесь своими знаниями, ответьте на вопрос:
D4. фанатам стратегий 3 (7 ) данный шаг отличается от предыдущего формулировкой ограничений на входные данные. перед проверкой решения с формулировкой ограничений из этого шага, убедитесь, что это решение проходит и на предыдущем шаге. к добавлено примечание! вскоре стало понятно, что всё совсем не просто. нельзя взять и построить здание. их в этой игре ещё и открыть нужно. новое здание типа a можно построить, только если на нашей базе функционирует хотя бы по одному новому зданию из списка необходимых зданий здания типа a . сколько на самом деле нам придётся построить зданий (не считая электростанций)? какие они? в каком порядке их строить? ваша – найти ответы на эти вопросы. примечание гарантируется, что существует такая последовательность постройки зданий, что здания всех типов можно построить. формат входных данных в первой строке записаны три целых числа n, m и t (1≤m≤n≤5⋅10^4; 1≤t≤2) – количество различных типов новых зданий в игре, количество новых зданий, которые нужно построить, и номер формата выходных данных. в следующей строке записаны m названий типов зданий, разделённых пробелами – требуемые для обеспечения устойчивой обороны здания. гарантируется, что строка не содержит одинаковых типов зданий. далее идёт n блоков по 2 строки следующего вида: в первой строке – название типа здания. во второй – длина списка необходимых зданий для здания данного типа и сам список необходимых зданий. гарантируется, что список не содержит одинаковых типов зданий. сумма длин списков необходимых зданий не превышает 5⋅10^4. название каждого типа здания состоит только из латинских букв и имеет длину не более десяти символов. формат выходных данных если t=1 , то выведите одно число – минимальное количество зданий, которые нужно построить. если t=2 , то в первой строке выведите одно число – минимальное количество зданий, которое необходимо построить, а во второй – k названий зданий, которые нужно построить, в том порядке, в котором их нужно строить. если существует несколько подходящих последовательностей – выведите любую из них. sample input 1: 13 5 2 refinery vehicle repair palace turret constryard 0 windtrap 1 constryard refinery 1 windtrap outpost 1 windtrap silo 2 refinery constryard vehicle 3 refinery windtrap outpost barracks 2 constryard outpost wall 1 outpost turret 1 outpost starport 2 silo refinery repair 1 vehicle hitech 3 vehicle wall outpost palace 1 starport sample output 1: 10 constryard windtrap refinery outpost silo vehicle turret starport repair palace
a: array [,] of integer;
begin
var n := ReadlnInteger('n = ');
var m := ReadlnInteger('m = ');
var rand := ReadlnInteger('Для ручного ввода нажмите 0');
if rand = 0 then begin
a := new integer[m, n];
for var i := 0 to m-1 do
for var j := 0 to n-1 do
a[i, j] := ReadlnInteger('a[' + i + ',' + j + '] = ');
end
else a := MatrixRandom(m, n, 1, 100);
Println(a);
var b := ArrGen(n, x -> 1);
for var i := 0 to m-1 do
for var j := 0 to n-1 do
if j mod 2 = 0 then
b[j] := b[j] * a[i, j];
b.Where((x, i)-> i mod 2 = 0).SortedDescending().Println();
end.