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

Задача . D. Удаление строки


Вам дана строка \(s\), состоящая из \(n\) символов. Каждый символ — либо 0, либо 1.

Вы можете проводить операции со строкой. Каждая операция состоит из двух шагов:

  1. выбрать целое число \(i\) от \(1\) до длины строки \(s\), после чего удалить символ \(s_i\) (длина строки уменьшается на \(1\), номера символов правее удаленного тоже уменьшаются на \(1\));
  2. если строка \(s\) не является пустой, удалить максимальный по длине префикс, состоящий из одинаковых символов (номера остальных символов и длина строки уменьшаются на длину удаленного префикса).

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

Например, если у вас есть строка \(s =\) 111010, первая операция может быть одной из следующих:

  1. выбрать \(i = 1\): тогда мы получим 111010 \(\rightarrow\) 11010 \(\rightarrow\) 010;
  2. выбрать \(i = 2\): тогда мы получим 111010 \(\rightarrow\) 11010 \(\rightarrow\) 010;
  3. выбрать \(i = 3\): тогда мы получим 111010 \(\rightarrow\) 11010 \(\rightarrow\) 010;
  4. выбрать \(i = 4\): тогда мы получим 111010 \(\rightarrow\) 11110 \(\rightarrow\) 0;
  5. выбрать \(i = 5\): тогда мы получим 111010 \(\rightarrow\) 11100 \(\rightarrow\) 00;
  6. выбрать \(i = 6\): тогда мы получим 111010 \(\rightarrow\) 11101 \(\rightarrow\) 01.

Вы заканчиваете проводить операции, когда строка \(s\) становится пустой. Какое максимальное количество операций вы можете провести?

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

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина строки \(s\).

Во второй строке задана \(s\) — строка из \(n\) символов. Каждый символ — либо 0, либо 1.

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

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

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

Примечание

В первом наборе входных данных, мы можем, например, выбрать \(i = 2\) и получить строку 010 после первой операции. После этого, выбрать \(i = 3\) и получить строку 1. Наконец, мы можем выбрать только \(i = 1\) и получить пустую строку.


Примеры
Входные данныеВыходные данные
1 5
6
111010
1
0
1
1
2
11
6
101010
3
1
1
1
3

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

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