fomax1337
12.05.2021 09:24

Минималистичная игра Вы играете в компьютерную игру. В этой игре есть n уровней. Изначально у вас открыт один уровень с номером 1. Для каждого уровня задан упорядоченный набор напрямую зависимых от него уровней. Уровень a называется косвенно зависимым от b, если либо a напрямую зависит от b, либо a косвенно зависит от одного из уровней, который напрямую зависит от b. Гарантируется, что каждый уровень косвенно зависим от первого, а также все уровни, кроме первого, зависимы напрямую от ровно одного другого уровня. Более формально, уровни представляют корневое дерево, с корнем - уровнем 1. При прохождении уровня i открывается первый уровень из набора напрямую зависимых от i уровней, после прохождения первого уровня и всех косвенно зависимых от него уровней открывается второй и так далее. Таким образом мы выполним все уровни. Более формально выполняется левый обход дерева, где самый левый сын - первый в списке. Для лучшего понимания посмотрите секцию с примечаниями.

У вас есть чит-код, который позволяет сделать не более k изменений. За одно изменение можно выбрать вершину, и поменять местами две соседних в наборе зависимых от нее вершин. Вам нужно сделать порядок посещения вершин минимально лексикографически возможным. Первый порядок лексикографически меньше второго, если для какого-то t (1 ≤ t ≤ n - 1) первые t уровней в порядках совпадают, а t + 1 уровень меньше в первом порядке.

Формат входных данных
В первой строке вводятся два целых числа n и k - количество уровней и ограничение на количество изменений (1 ≤ n ≤ 5 * 105, 0 ≤ k ≤ 1012).

В последующих n строках идет описание уровней. На i-й строке сначала вводится целое число ti (0 ≤ ti ≤ n - 1) - количество уровней напрямую зависимых от i-го, после чего вводится ti целых чисел - номера уровней напрямую зависимых от i-го.

Формат результата
Выведите n чисел - минимальный лексикографически возможный порядок после не более чем k изменений.

Примеры
Входные данные
5 1
2 3 2
2 5 4
0
0
0
Результат работы
1 2 5 4 3
Входные данные
5 2
2 3 2
2 5 4
0
0
0
Результат работы
1 2 4 5 3
Входные данные
5 4
4 5 3 2 4
0
0
0
0
Результат работы
1 2 3 4 5
Примечания
Система оценки:

Решения, работающие при n ≤ 10, будут набирать не менее 10% .

Решения, работающие, когда от каждого уровня напрямую зависит не более двух других уровней, будут набирать не менее 25% .

Решения, работающие при n ≤ 5000, будут получать не менее 30% .

Решения, работающие, когда все уровни напрямую зависимы от первого, будут получать не менее 35% .

Решения, работающие, когда от каждого уровня напрямую зависит не более десяти других уровней, будут набирать не менее 50% .

Решения, работающие при n ≤ 200000, будут получать не менее 65% .

Разбор примеров:
Зависимости уровней в первом и втором тесте из условия не отличаются, отличаются лишь значения k. Изначальный обход дерева выглядит следующим образом: 1 3 2 5 4.

Рисунок снизу соответствует одному изменению в первом примере

После этого изменения порядок посещения станет: 1 2 5 4 3.

Рисунок снизу соответствует второму изменения во втором примере

После этого изменения порядок посещения станет: 1 2 4 5 3. Можно показать, что порядок обхода лексикографичски меньше этого нельзя получить ни за какое количество действий.

Нажмите на рекламу ниже и сразу увидите ответ
Ответ:
Anele2003
29.10.2022 00:09
Var a1,a2,a3,a4,a5,a6,a7,a8,k:integer;
begin
k:=0;
read (a1,a2,a3,a4,a5,a6,a7,a8);
if (a1>0) and (a2>0) and (a3>0) and (a4>0) and (a5>0) and (a6>0) and (a7>0) and (a8>0) then
begin
if (a1 mod 3 = 0) and (a1 mod 10 = 4) then k:=k+1;
if (a2 mod 3 = 0) and (a2 mod 10 = 4) then k:=k+1;
if (a3 mod 3 = 0) and (a3 mod 10 = 4) then k:=k+1;
if (a4 mod 3 = 0) and (a4 mod 10 = 4) then k:=k+1;
if (a5 mod 3 = 0) and (a5 mod 10 = 4) then k:=k+1;
if (a6 mod 3 = 0) and (a6 mod 10 = 4) then k:=k+1;
if (a7 mod 3 = 0) and (a7 mod 10 = 4) then k:=k+1;
if (a8 mod 3 = 0) and (a8 mod 10 = 4) then k:=k+1;
writeln (k);
end else
writeln ('Неверный ввод');
end.
0,0(0 оценок)
Ответ:
svetik83
21.12.2021 09:09
1. Вот так это пишется с функцией

// PascalABC.NET 3.1, сборка 1200 от 13.03.2016
function IsPrime(n:integer):boolean;
begin
  if n<4 then Result:=True
  else begin
    var found:= (n mod 2 = 0);
    var p:=3;
    while (not found) and (sqr(p)<=n) do
      begin
      found:=(n mod p = 0);
      p+=2
      end;
    Result:=not found
    end
end;

begin
  Writeln('k=',ArrRandom(ReadInteger('n='),1,999).Println.
    Where(x->IsPrime(x)).Count)
end.

Тестовое решение:
n= 10
401 828 780 444 694 965 23 341 673 875
k=3

2. А вот так это пишется с процедурой

// PascalABC.NET 3.1, сборка 1200 от 13.03.2016
procedure IsPrime(n:integer; var res:boolean);
begin
  if n<4 then res:=True
  else begin
    var found:= (n mod 2 = 0);
    var p:=3;
    while (not found) and (sqr(p)<=n) do
      begin
      found:=(n mod p = 0);
      p+=2
      end;
    res:=not found
    end
end;

begin
  var a:=ArrRandom(ReadInteger('n='),1,999); a.Println;
  var k:=0;
  var prime:boolean;
  foreach var e in a do begin
    IsPrime(e,prime);
    if Prime then Inc(k)
    end;
  Writeln('k=',k)
end.

Тестовое решение:
n= 12
199 43 71 365 417 904 170 212 694 103 161 689
k=4
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота