Не могу понять смысл задачи "MEX" - C#

Узнай цену своей работы

Формулировка задачи:

Помогите понять смысл задачи "MEX". Почему набор не задается во входных данных? Условие задачи:

Задача «MEX»

ограничение по времени на тест3 секунды ограничение по памяти на тест256 мегабайт вводstdin выводstdout Операция MEX для набора целых неотрицательных чисел возвращает наименьшее неотрицательное целое число, не содержащееся в наборе. Например, для набора (0, 1, 2, 2, 4, 4, 11) это значение равно 3, для набора (1, 1, 2, 5, 7) это значение равно 0, а для набора (0, 1, 2, 2, 2, 3) это значение равно 4. В наборе могут встречаться одинаковые числа. Вам задана последовательность из нескольких операций одного из двух видов: + x — добавить число x в набор. - x — удалить одно вхождение числа x из набора (если числа x в наборе нет, то операция игнорируется). Изначально набор пуст. Вам необходимо вывести значение MEX для набора после применения каждой из операций. Операции выполняются последовательно одна за другой.

Входные данные

В первой строке содержится число n — количество операций (1 ≤ n ≤ 150000). В следующих n строках содержатся операции, по одной в строке. Операция может быть одного из двух видов: + x — добавить число x в набор (0 ≤ x ≤ 109). - x — удалить одно вхождение числа x из набора. Знак операции и число разделены единичным пробелом.

Выходные данные

Выведите n чисел через пробел — значение MEX для набора после применения каждой из указанных операций.
Примеры:

входные данные

7 + 2 + 1 + 0 + 4 + 2 - 2 - 2

выходные данные

0 0 3 3 3 3 2

входные данные

6 + 0 + 1 + 0 - 1 - 0 - 0

выходные данные

1 2 2 1 1 0
Примечание:
Операция MEX (minimum excludant) является одной из основных операций в теории игр.
Разобрался только что, кто сможет реализовать, каким методом воспользоваться?

Решение задачи: «Не могу понять смысл задачи "MEX"»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. class Program
  5. {
  6.     public static void Main()
  7.     {
  8.         List<int> mex = new List<int>();
  9.         Dictionary<int, int> bag = new Dictionary<int, int>();
  10.         for (int i = Int32.Parse(Console.ReadLine()); i > 0; --i)
  11.         {
  12.             string[] s = Console.ReadLine().Split();
  13.             int x = Int32.Parse(s[1]);
  14.             int n;
  15.             if (!bag.TryGetValue(x, out n)) n = 0;
  16.             n += s[0] == "+" ? 1 : -1;
  17.             if (n > 0)
  18.             {
  19.                 bag[x] = n;
  20.             }
  21.             else if (n == 0)
  22.             {
  23.                 bag.Remove(x);
  24.             }
  25.             x = 0;
  26.             while (bag.ContainsKey(x)) ++x;
  27.             mex.Add(x);
  28.         }
  29.         Console.WriteLine(String.Join(" ", mex));
  30.     }
  31. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы