Олимпиадный тренинг

Задача . B. Два массива


У RedDreamer есть массив \(a\), состоящий из \(n\) неотрицательных целых чисел. Также у RedDreamer есть свое несчастливое число — \(T\).

Обозначим неудачливость массива \(b\) длины \(m\) как \(f(b)\) — количество пар целых чисел \((i, j)\), в которых \(1 \le i < j \le m\) и \(b_i + b_j = T\). RedDreamer должен покрасить каждый элемент массива \(a\) в один из двух цветов — белый или черный (цвет каждого элемента выбирается независимо от остальных элементов), а после этого создать два массива \(c\) и \(d\) таким образом, что все белые элементы принадлежат \(c\), а все черные — \(d\) (возможно, что один из этих массивов окажется пустым). RedDreamer хочет покрасить массив так, чтобы значение \(f(c) + f(d)\) было минимально возможным.

Например:

  • если \(n = 6\), \(T = 7\) и \(a = [1, 2, 3, 4, 5, 6]\), можно покрасить \(1\)-й, \(4\)-й и \(5\)-й элемент в белый цвет, а все остальные — в черный. Тогда \(c = [1, 4, 5]\), \(d = [2, 3, 6]\), и \(f(c) + f(d) = 0 + 0 = 0\);
  • если \(n = 3\), \(T = 6\) и \(a = [3, 3, 3]\), можно покрасить \(1\)-й элемент в белый цвет, а все остальные — в черный. Тогда \(c = [3]\), \(d = [3, 3]\), и \(f(c) + f(d) = 0 + 1 = 1\).

Помогите RedDreamer раскрасить массив оптимальным образом!

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

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора содержит два целых числа \(n\) и \(T\) (\(1 \le n \le 10^5\), \(0 \le T \le 10^9\)) — длина массива и несчастливое число, соответственно.

Вторая строка набора содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(0 \le a_i \le 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам тестовых данных не превосходит \(10^5\).

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

Для каждого набора тестовых данных выведите \(n\) целых чисел: \(p_1\), \(p_2\), ..., \(p_n\) (\(p_i\) равняется либо \(0\), либо \(1\)), описывающих раскраску. Если \(p_i\) равняется \(0\), то элемент \(a_i\) — белый и принадлежит массиву \(c\), в противном случае он — черный и принадлежит массиву \(d\).

Если существует несколько ответов, при которых достигается минимальное значение \(f(c) + f(d)\), выведите любой из них.


Примеры
Входные данныеВыходные данные
1 2
6 7
1 2 3 4 5 6
3 6
3 3 3
1 0 0 1 1 0 
1 0 0

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя