Министерство науки и высшего образования Российской Федерации
Российский совет олимпиад школьников
Национальный исследовательский университет ИТМО

Информатика. Заключительный этап. 10 класс

Протокол результатов

Участник: Знак Владислав Вячеславович
Класс: Выпускник 2024 года
Дата и время прохождения: 12.03.2023, с 11:23:53 до 14:23:54
Баллы: 20 из 20

Работа участника

1. Кодирование информации. Системы счисления: A и B сидели на трубе

Условие задачи:

Определите две последние цифры шестнадцатеричной записи числа 0,AB16N0,AB_{16}^N при N=2000000003810N=20000000038_{10}.

В ответе запишите подряд две шестнадцатеричные цифры в порядке их следования в числе.

Пример записи ответа:
1A

Рекомендации к пояснению решения задачи.

В пояснении к решению задачи раскройте следующие вопросы:

1. Решали ли Вы задачу исключительно аналитически или использовали электронные таблицы и/или программирование на каком-то этапе решения задачи?

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

3. Если в какой-то части решения Вы использовали электронные таблицы, охарактеризуйте операции, которые Вы в них осуществили, назначение введенных в ячейки формул, и как это позволило получить ответ.

4. Если в какой-то части решения Вы использовали программирование, поясните, алгоритм, который Вы реализовали, включая назначение используемых переменных и структур данных, и как это позволило получить ответ.

Рекомендуемое время пояснения решения 2-4 минуты.

Ответ участника:

E9


2. Кодирование информации. Объем информации: Небо, лес и скалы

Условие задачи:

Вася хранит фотографию природы формата 3N3N пикселей на 4N4N пикселей. Формат хранения предполагает, что изображение может содержать 6553665536 различных цветов, и для хранения каждого пикселя используется одинаковое для всех пикселей минимально возможное количество бит (хранятся только коды пикселей). Вася разработал алгоритм, позволяющий выделить на фотографиях лес, небо и скалы (Вася считает, что фотографировал только их, и его алгоритм относит каждый пиксель к одной из этих категорий). После чего он выяснил, что в фрагментах, определяемых как небо, встречаются всего 20482048 различных цветов, в определяемых как лес – 1638416384 различных цвета, а в определяемых как скалы – в 22 раза меньше, чем в определяемых как небо. Вася изменил формат хранения данных так, чтобы теперь минимально возможное количество пикселей определялось отдельно для леса, отдельно для скал и отдельно для неба (хранятся также только коды пикселей, но пиксели каждого из трех фрагментов кодируются независимо). После обработки его фотография стала занимать на 2340023400 Кбайт меньше. Вася считает, что пикселей, относящихся к фрагментам леса, неба и скал на его фотографии поровну. Определите минимальное NN, при котором это возможно.

Пример записи ответа:
171717

Рекомендации к пояснению решения задачи.

В пояснении к решению задачи раскройте следующие вопросы:

1. Решали ли Вы задачу исключительно аналитически или использовали электронные таблицы и/или программирование на каком-то этапе решения задачи?

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

3. Если в какой-то части решения Вы использовали электронные таблицы, охарактеризуйте операции, которые Вы в них осуществили, назначение введенных в ячейки формул, и как это позволило получить ответ.

4. Если в какой-то части решения Вы использовали программирование, поясните, алгоритм, который Вы реализовали, включая назначение используемых переменных и структур данных, и как это позволило получить ответ.

Рекомендуемое время пояснения решения 1-3 минуты.

Ответ участника:

1920


3. Основы логики: Кто в системе?

Условие задачи:

Дана система логических уравнений. Определите, сколько существует различных наборов переменных A,B,CA, B, C и DD, при которых выполняется условие истинности системы.

{((AB) XOR (BC)) XOR (CD)=1((AB)(BC))(CD)=1((AB) XOR (BC)) XOR (CD)=1((AB)(BC))(CD)=1 \begin{cases} ((A \wedge B) \space XOR \space (B \wedge C)) \space XOR \space (C \wedge D)=1 \\ ((A \lor B) \to (B \lor C)) \to (C \lor D)=1 \\ ((A \lor B) \space XOR \space (B \lor C)) \space XOR \space (C \lor D)=1 \\ ((A \wedge B) \to (B \wedge C)) \to (C \wedge D)=1 \end{cases} \

Примечание: \wedge - операция конъюнкции, \lor - логическая дизъюнкция, \to - импликация, \leftarrow - обратная импликация, XORXOR – исключающее или, 11 – истина. Операция обратной импликации эквивалентна операции (AB)(A \lor \overline{B}).

Пример записи ответа:
171717

Рекомендации к пояснению решения задачи.

В пояснении к решению задачи раскройте следующие вопросы:

1. Решали ли Вы задачу исключительно аналитически или использовали электронные таблицы и/или программирование на каком-то этапе решения задачи?

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

3. Если в какой-то части решения Вы использовали электронные таблицы, охарактеризуйте операции, которые Вы в них осуществили, назначение введенных в ячейки формул, и как это позволило получить ответ.

4. Если в какой-то части решения Вы использовали программирование, поясните, алгоритм, который Вы реализовали, включая назначение используемых переменных и структур данных, и как это позволило получить ответ.

Рекомендуемое время пояснения решения 2-4 минуты.

Ответ участника:

3


4. Кодирование информации. Алгоритмы обработки кодированной информации: Очень длинная строка

Условие задачи:

Последовательности символов строятся по следующим правилам:

Исходная последовательность состоит из двух букв: “AAAA”. Далее на каждом шаге берется очередная буква английского алфавита, и пара таких букв добавляется в начало последовательности и после каждой буквы последовательности, полученной на предыдущем шаге. Например, последовательности, получаемые после первых 33 шагов, будут выглядеть таким образом (третья последовательность разбита на две строки для лучшего восприятия):

  1. BBABBABBBBABBABB
  2. CCBCCBCCACCBCCBCCACCBCCBCCCCBCCBCCACCBCCBCCACCBCCBCC
  3. DDCDDCDDBDDCDDCDDBDDCDDCDDADDCDDCDDBDDCDDCDDCDDCDDBDDCDDCDDBDDCDDCDDADDCDDCDDBDDCDDC
    DDBDDCDDCDDADDCDDCDDBDDCDDCDDBDDCDDCDDDDBDDCDDCDDADDCDDCDDBDDCDDCDDBDDCDDCDD

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

Определите, какие буквы стоят в результирующей последовательности на позициях 1212 148148 785785 и 22 069069 987987 672672 727727, считая от начала строки с 11. В ответе укажите их подряд в указанном порядке.

Примечание. Порядок следования символов в английском алфавите: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ.

Пример записи ответа:
AB

Рекомендации к пояснению решения задачи.

В пояснении к решению задачи раскройте следующие вопросы:

1. Решали ли Вы задачу исключительно программированием или использовали электронные таблицы и/или аналитические методы на каком-то этапе решения задачи?

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

3. Если в какой-то части решения Вы использовали аналитические методы решения, опишите, какие зависимости, закономерности и как Вы определили из условия или результатов работы программы, какие данные и формулы использовали для вычислений, и как это позволило получить ответ.

4. Если в какой-то части решения Вы использовали электронные таблицы, охарактеризуйте операции, которые Вы в них осуществили, назначение введенных в ячейки формул, и как это позволило получить ответ.

Рекомендуемое время пояснения решения 1-3 минуты.

Ответ участника:

SG


5. Алгоритмизация и программирование. Анализ алгоритма, заданного в виде блок-схемы: Считаем ноли

Условие задачи:

Дана блок-схема алгоритма. MM – массив размера N1N - 1. Операция A%BA \%B означает взятие остатка от деления AA на BB.

Алгоритм последовательно запустили со всеми натуральными значениями NN от 100100 до 199199 включительно. Определите, при каком значении NN был выведен наименьший результат (назовем его величиной AA), а при каком – наибольший (назовем его величиной BB). В случае, если величина AA выводилась несколько раз – определите наименьшее из значений NN, при которых это произошло. В случае, если величина BB выводилась несколько раз – определите наибольшее из значений NN, при которых это произошло. В ответе укажите через пробел 22 числа – сначала значение NN для величины AA и затем значение NN для величины BB.

Примечание: A/BA/B означает операцию целочисленного деления AA на BB.

Пример записи ответа:
171 717

Рекомендации к пояснению решения задачи.

В пояснении к решению задачи раскройте следующие вопросы:

1. Решали ли Вы задачу исключительно программированием или использовали электронные таблицы и/или аналитические методы на каком-то этапе решения задачи?

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

3. Если в какой-то части решения Вы использовали аналитические методы решения, опишите, какие зависимости, закономерности и как Вы определили из условия или результатов работы программы, какие данные и формулы использовали для вычислений, и как это позволило получить ответ.

4. Если в какой-то части решения Вы использовали электронные таблицы, охарактеризуйте операции, которые Вы в них осуществили, назначение введенных в ячейки формул, и как это позволило получить ответ.

Рекомендуемое время пояснения решения 2-4 минуты.

Ответ участника:

101 178


6. Телекоммуникационные технологии: Адреса и маски

Условие задачи:

Маска сети для IPv4 адресации – это 44-х байтное число, которое делит IP адрес на адрес сети (первая часть) и адрес узла (вторая часть). У всех адресов одной IP-сети совпадают первые части и отличаются вторые. Для части IP адреса, соответствующей адресу сети, в маске сети содержатся двоичные единицы, а для части IP адреса, соответствующей адресу узла, в маске сети содержатся двоичные нули. Для записи масок сетей часто используется нотация, когда после IP-адреса через «//» указывается число бит, отводимых в маске под адрес сети. Например, для адреса 11.12.0.811.12.0.8 и маски 255.0.0.0255.0.0.0 запись будет иметь следующий вид 11.12.0.8/811.12.0.8/8. Служебным адресом сети называют адрес, у которого все биты адреса узла (второй части) равны 00. Широковещательным адресом сети называют адрес, у которого все биты адреса узла (второй части) равны 11.

Известно, что широковещательный адрес некоторой сети – 192.121.87.255192.121.87.255, а адрес 192.121.83.178192.121.83.178 не принадлежит этой сети. Определите служебный адрес этой сети и ее маску. Если существует несколько возможных масок, укажите ту, у которой максимально количество узлов в сети.

Введите ответ на поставленную задачу в виде: A.B.C.D/MA.B.C.D/M, где A,B,C,DA, B, C, D – байты служебного адреса сети в десятичной системе счисления, а MM – число бит, отводимых под адрес сети.

Пример записи ответа:
11.12.0.8/8

Рекомендации к пояснению решения задачи.

В пояснении к решению задачи раскройте следующие вопросы:

1. Решали ли Вы задачу исключительно аналитически или использовали электронные таблицы и/или программирование на каком-то этапе решения задачи?

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

3. Если в какой-то части решения Вы использовали электронные таблицы, охарактеризуйте операции, которые Вы в них осуществили, назначение введенных в ячейки формул, и как это позволило получить ответ.

4. Если в какой-то части решения Вы использовали программирование, поясните, алгоритм, который Вы реализовали, включая назначение используемых переменных и структур данных, и как это позволило получить ответ.

Рекомендуемое время пояснения решения 1-3 минуты.

Ответ участника:

192.121.84.0/22


7. Технологии обработки информации в электронных таблицах. Технологии сортировки и фильтрации данных: VK

Условие задачи:

Петя изучает различные виды диаграмм в электронных таблицах. Для того, чтобы потренироваться в построении точечной диаграммы с маркерами, Петя решил изобразить логотип IT-компании VK, заполнив целыми неотрицательными числами диапазон A2:B21A2:B21:

Известно, что числа в столбце BB отсортированы по невозрастанию. Какая минимальная сумма может быть у чисел в красных ячейках. В ответе укажите целое число.

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

Пример записи ответа:
171717

Рекомендации к пояснению решения задачи.

В пояснении к решению задачи раскройте следующие вопросы:

1. Решали ли Вы задачу исключительно в электронных таблицах или использовали программирование и/или аналитические методы на каком-то этапе решения задачи?

2. Для части решения, использующего электронные таблицы, охарактеризуйте операции, которые Вы в них осуществили, назначение введенных в ячейки формул, и как это позволило получить ответ.

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

4. Если в какой-то части решения Вы использовали аналитические методы решения, опишите, какие зависимости, закономерности и как Вы определили из условия или результатов вычислений в электронных таблицах, какие данные и формулы использовали для вычислений, и как это позволило получить ответ. Рекомендуемое время пояснения решения 1-3 минуты.

Ответ участника:

44


8. Технологии программирования: Тестирование мессенджера

Условие задачи:
Имя входного файла стандартный ввод
Имя выходного файла стандартный вывод
Ограничение по времени 2 секунды
Ограничение по памяти 256 мегабайт

Перед выпуском VK Messenger'а разработчики из IT-компании «VK», как и положено, убеждаются в корректности работы приложения. Проверкой корректности работы систем занимаются тестировщики и QA-инженеры.

Часть функциональных тестов для тестирования смены ников выглядит следующим образом:

  1. генерируется случайный сценарий взаимодействия пользователей с приложением;
  2. в приложении симулируется выполнение этого сценария;
  3. проверяется корректность итогового состояния приложения.

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

Каждый сценарий состоит из трех наборов событий.

  1. Первый набор состоит из событий вида «в момент времени tit_i поступил запрос регистрации нового пользователя с ID\text{ID} idi\mathtt{id}_i и ником handlei\mathtt{handle}_i».
    Гарантируется, что ID\text{ID} уникальны для всех пользователей приложения. Если выбранный ник никем не занят, регистрация проходит успешно, иначе запрос на регистрацию отклоняется. Во втором случае пользователь с тем же ID\text{ID} может попробовать зарегистрироваться еще раз.

  2. Второй набор описывает события вида «в момент времени tit_i пользователь с ником handlei,1\mathtt{handle}_{i,1} отправляет запрос на смену ника на handlei,2\mathtt{handle}_{i,2}».
    Гарантируется, что для каждого такого запроса ник handlei,1\mathtt{handle}_{i,1} кому-то принадлежит. Если handlei,2\mathtt{handle}_{i,2} уже занят каким-либо пользователем, запрос отклоняется, иначе пользователь успешно меняет ник. При успешной смене ника старый ник перестает ассоциироваться с каким-либо пользователем, пока кто-то снова его не займет.

  3. Третий набор описывает события вида «в момент времени tit_i пользователь с ником handlei,1\mathtt{handle}_{i,1} отправляет сообщение пользователю с ником handlei,2\mathtt{handle}_{i,2}».
    Гарантируется, что и handlei,1\mathtt{handle}_{i,1}, и handlei,2\mathtt{handle}_{i,2} на момент времени tit_i соответствуют каким-то зарегистрированным пользователям.

Также гарантируется, что никакие два события не происходят в одно и то же время, то есть все tit_i уникальны.

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

Формат входных данных

В первой строке ввода дано единственное целое число TT — количество сценариев, которое вам необходимо обработать (1T1001 \le T \le 100).

Далее следуют TT описаний сценариев. Описание каждого сценария начинается с пустой строки, после чего следуют три набора событий. В первой строке описания qq-го набора (qq от 11 до 33) дано единственное целое число nqn_q — количество событий в наборе, после чего следуют nqn_q строк в указанном ниже формате (1n1+n2+n310001 \le n_1 + n_2 + n_3 \le 1000; 0nq0 \le n_q).

  1. События первого набора задаются в формате «REG\text{REG} idi\mathtt{id}_i BY\text{BY} handlei\mathtt{handle}_i AT\text{AT} tit_i».
  2. События второго набора задаются в формате « CHANGE\text{CHANGE} handlei,1\mathtt{handle}_{i,1} TO\text{TO} handlei,2\mathtt{handle}_{i,2} AT\text{AT} tit_i».
  3. События третьего набора задаются в формате «SEND FROM\text{SEND FROM} handlei,1\mathtt{handle}_{i,1} TO\text{TO} handlei,2\mathtt{handle}_{i,2} AT\text{AT} tit_i».

Моменты событий tit_i — целые числа от 11 до 10910^9. Также все idi\mathtt{id}_i — целые числа от 11 до 10910^9, а handlei\mathtt{handle}_i — строки из маленьких латинских букв длины не более 1010.

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

Формат выходных данных

Для каждого сценария выведите требуемую статистику для каждого пользователя.

В первой строке статистики выведите целое число qq — количество зарегистрированных пользователей. В следующих qq строках выведите статистику для каждого пользователя в порядке возрастания их ID\text{ID} в формате «<id\mathtt{id}> RECEIVED \text{RECEIVED } <total\mathtt{total}> TOP\text{TOP} <counttop\mathtt{count}_\mathrm{top}> FROM \text{FROM } <idtop\mathtt{id}_\mathrm{top}>», где total\mathrm{total} — суммарное количество полученных пользователем сообщений, idtop\mathtt{id}_\mathrm{top}ID\text{ID} пользователя, от которого он получил больше всего сообщений, а counttop\mathtt{count}_\mathrm{top} — само количество сообщений, полученных от пользователя idtop\mathtt{id}_\mathrm{top}.

Если у некоторого пользователя есть несколько собеседников, отправивших ему максимальное число сообщений, выведите в качестве idtop\mathtt{id}_\mathrm{top} минимальный из их ID\text{ID}. Если пользователь не получал сообщения, считайте counttop\mathtt{count}_\mathrm{top} равным 00.

Пример

Стандартный ввод Стандартный вывод
2

4 REG 1 BY sh AT 10 REG 2 BY sh AT 11 REG 3 BY qwerty AT 12 REG 2 BY shvetz AT 15 2 CHANGE sh TO shvetz AT 13 CHANGE shvetz TO sh AT 18 4 SEND FROM shvetz TO qwerty AT 14 SEND FROM shvetz TO shvetz AT 16 SEND FROM shvetz TO qwerty AT 17 SEND FROM qwerty TO sh AT 19

2 REG 1 BY a AT 10 REG 2 BY b AT 11 4 CHANGE a TO c AT 14 CHANGE b TO a AT 17 CHANGE c TO a AT 20 CHANGE c TO b AT 23 10 SEND FROM a TO b AT 12 SEND FROM b TO a AT 13 SEND FROM b TO c AT 15 SEND FROM b TO c AT 16 SEND FROM a TO c AT 18 SEND FROM a TO c AT 19 SEND FROM c TO a AT 21 SEND FROM a TO c AT 22 SEND FROM a TO b AT 24 SEND FROM a TO b AT 25

2
1 RECEIVED 2 TOP 1 FROM 1
3 RECEIVED 2 TOP 2 FROM 1
2
1 RECEIVED 8 TOP 8 FROM 2
2 RECEIVED 2 TOP 2 FROM 1

Комментарий

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

Рекомендации к пояснению решения задачи (только для участников 10 класса).

В пояснении к решению задачи раскройте следующие вопросы:

1. Кратко опишите алгоритм решения задачи.

2. По коду поясните назначение отдельных программных структур (функций, процедур, классов, фрагментов кода, выполняющих определенные операции по считыванию, обработке и записи данных) и структур данных, раскройте их роль в реализованном алгоритме.

3. По желанию, можно привести оценку сложности предложенного алгоритма.

Рекомендуемое время пояснения решения 2-4 минуты.

Ответ участника:
d = int(input())
for op in range(d):
    _ = input()
    minid = 10 ** 18
    sobs = []
    n1 = int(input())
    for i in range(n1):
        s = input().split()
        sobs.append(s)
    n1 = int(input())
    for i in range(n1):
        s = input().split()
        sobs.append(s)
    n1 = int(input())
    for i in range(n1):
        s = input().split()
        sobs.append(s)

    sobs = sorted(sobs, key=lambda x: int(x[-1]))
    id_name = {}

    name_id = dict()
    names = set()
    messages = dict(dict())
    regd = 0
    for zap in sobs:
        if zap[0] == "REG" and zap[3] not in names:
            regd += 1
            minid = min(minid, int(zap[1]))
            id_name[int(zap[1])] = zap[3]
            name_id[zap[3]] = int(zap[1])
            names.add(zap[3])
        if zap[0] == "CHANGE" and zap[3] not in names:
            # print(names)
            names.remove(zap[1])
            old = name_id[zap[1]]
            name_id.pop(zap[1])
            name_id[zap[3]] = old
            names.add(zap[3])
        if zap[0] == "SEND":

            if name_id[zap[4]] not in messages.keys():
                messages[name_id[zap[4]]] = {}
            if name_id[zap[2]] in messages[name_id[zap[4]]].keys():
                messages[name_id[zap[4]]][name_id[zap[2]]] += 1
            else:
                messages[name_id[zap[4]]][name_id[zap[2]]] = 1
    # print(messages)
    print(regd)
    for i in sorted(name_id.values()):

        if i in messages.keys():
            # print(i, sorted(messages.keys()))
            cnt = 0
            maxx = -1
            mi = -1
            for j in sorted(messages[i].keys()):
                x = messages[i][j]
                cnt += x
                if x > maxx:
                    maxx = x
                    mi = j
            if mi == -1:
                mi = minid
            if cnt > -1:
                print(i, "RECEIVED", cnt, "TOP", maxx, "FROM", mi)
        else:
            print(i, "RECEIVED", 0, "TOP 0 FROM", minid)
    # print(messages)
    # print(sobs)

9. Технологии программирования: Устранение массива

Условие задачи:
Имя входного файла стандартный ввод
Имя выходного файла стандартный вывод
Ограничение по времени 2 секунды
Ограничение по памяти 256 мегабайт

Дан массив aa длины nn. Каждый элемент массива — 1-1, 00 или 11. Известно, что 1-1 находятся только строго в правой половине массива, то есть на индексах от n+12+1\left\lfloor\dfrac{n + 1}{2}\right\rfloor + 1 до nn. Все оставшиеся элементы могут быть равны только 00 или 11.

С массивом разрешается выполнять следующие два вида действий:

  1. Заплатить две монеты и удалить из массива любое число aia_i. После такого действия массив [a1,a2,,ak][a_1, a_2, \ldots, a_k] превращается в [a1,,ai1,ai+1,,ak][a_1, \ldots, a_{i-1}, a_{i+1}, \ldots, a_k].
  2. Заплатить одну монету и заменить два стоящих рядом числа aia_i и ai+1a_{i+1} на ai+1+1a_{i+1} + 1 копию числа aia_i. То есть, возможны следующие преобразования:

file

Иными словами, 1-1 можно удалить вместе с предыдущим числом, 00 можно удалить сам по себе, если он стоит не в начале массива, а 11 можно заменить на предшествующее ей число.

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

Формат входных данных

В первой строке дано единственное целое число TT — количество наборов входных данных (1T1001 \le T \le 100). Далее следуют TT наборов входных данных.

Каждый набор входных данных начинается со строки, содержащей единственное число nn — изначальную длину массива. В следующей строке через пробел перечислены целые числа a1a_1, \ldots, ana_n — элементы массива (1ai1-1 \le a_i \le 1).

Гарантируется, что сумма длин массивов по всем наборам входных данных не превосходит 10610^6.

Формат выходных данных

Выведите TT целых чисел, каждое в своей строке — ответы на задачу для каждого набора входных данных в том порядке, в котором они даны во вводе.

Пример

Стандартный ввод Стандартный вывод
4
7
1 1 0 0 -1 1 1
5
0 0 0 0 0
11
0 1 0 1 1 0 -1 1 1 0 -1
10
0 1 1 1 1 -1 1 0 1 0

6
6
9
11

Комментарий

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

Рекомендации к пояснению решения задачи (только для участников 10 класса).

В пояснении к решению задачи раскройте следующие вопросы:

1. Кратко опишите алгоритм решения задачи.

2. По коду поясните назначение отдельных программных структур (функций, процедур, классов, фрагментов кода, выполняющих определенные операции по считыванию, обработке и записи данных) и структур данных, раскройте их роль в реализованном алгоритме.

3. По желанию, можно привести оценку сложности предложенного алгоритма.

Рекомендуемое время пояснения решения 2-4 минуты.

Ответ участника:
for y in range(int(input())):
    _ = input()
    lst = list(map(int, input().split()))
    f_1 = -1
    cnt = 2
    one_bef_1 = 1
    one_aft_1 = 0
    min_count = 0
    # if lst[0] == 0:
    #     one_bef_1 = 1
    #     cnt+=2
    last_min =-1
    zeroes = 0
    minuses_lost= 0
    for i in range(1, len(lst)):
        if lst[i] == 1 and f_1 == -1:
            cnt += 2
            one_bef_1 += 1
            # print(one_bef_1, "++++++")
        elif lst[i] == 0:
            cnt+=1
            zeroes+=1
        elif lst[i] == -1:
            f_1 = i
            # print(-1, one_bef_1, zeroes)
            if one_bef_1>0:
                one_bef_1-=1
                cnt-=1
            elif zeroes>0:
                zeroes-=1
            elif minuses_lost>0:
                minuses_lost-=1
                cnt-=1
            else:
                cnt+=2
                minuses_lost+=1
        elif lst[i] == 1 and f_1:
            # print("vvvv", one_bef_1, zeroes)
            if one_bef_1>0:
                one_bef_1-=1
            elif zeroes>0:
                zeroes-=1
                cnt+=1
            else:
                cnt+=2
        # print(cnt, i, one_bef_1, "end")
    print(cnt)
    # print()
    # print()