Работа со строками и std контейнерами



Темы для прохождения на данной лабе

  1. Простые задачи на работу со строками std::string.
  2. Использование стандартных контейнеров vector, list, queue, stack, deque.
  3. Задача на очереди из ЕГЭ.
  4. Проверка корректности скобочной последовательности. (С одним видом скобок и с несколькими видами скобок.)

Задачи для будущего контеста

Контест с автопроверкой задач к сожалению пока не готов. Under construction...

Задачи от Ольги Архангельской

Задача 1

Просумировать два двоичных числа.
На вход подаются две строки вида a = "1010", b = "1011"
Выход: "10101"
Строки могут быть очень длинными (до 1000 символов длиной).

Задача 2

Дан массив целых чисел nums (в форме std::vector<int>) и заданное число N. Требуется подобрать из этого массива четыре элемента так, чтобы их сумма равнялась N. То есть: nums[i] + nums[j] + nums[k] + nums[z] == N.

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

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

Функция должна принимать на вход 2 аргумента: std::vector<int> nums, N. Заголовок функции: void findArrayQuadruplet(std::vector<int> &nums, int N),

где nums -- исходный массив, N -- заданное чисо.

Функцию main() в данной задаче описывать не нужно!

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

Функция должна возвращать std::vector<int> длины ровно 4: vector<int> {nums[i], nums[j], nums[k], nums[z]}. Если подходящего набора чисел в исходном массиве нет, ваша функция должна вернуть пустой std::vector.

Пример входных-выходных данных:

-> [2, 7, 4, 0, 9, 5, 1, 3]
-> 20
--
<- [0, 4, 7, 9]

Задача 3

Сбалансированные подстроки
Дана сбалансированная строка, (Та в которой количество L и R символов равны).
Необходимо разделить ее на максимальное количество сбалансированных подстрок
и вернуть их количество.
Вход: s = "RLRRLLRLRL"
Выход: 4  ("RL", "RRLL", "RL", "RL")

Задача 4

Число записано в виде вектора (дан именно std::vector), необходимо добавить к нему единицу.
Пример:
-> [1,2,3]
<- [1,2,4]

-> [9,9,9]
<- [1, 0, 0, 0]

Задача 5

    Дан массив интервалов в форме вектора пар std::vector<std::pair<double, double>>.
    В данном списке первые числа идут по возрастанию ("неубыванию").
Требуется объединяем пересекающиеся.

    Пример:
            Вход: [[1, 3], [2, 6], [8, 10], [15, 18]]
            Выход: [[1, 6], [8, 10], [15, 18]]

    Пояснение: [1,3] и [2,6] пересекаются, объединяем их в [1, 6].

Задача 6

Сравнить две версии, если v1 > v1 вернуть 1, v1 < v2 вернуть -1, если равны то 0. (игнорирую лидирующие нули)
Примеры:
        Вход: version1 = "0.1", version2 = "1.1"
        Выход: -1

        Вход: version1 = "1.01" version2 = "1.001"
        Выход: 0

        Вход: version1 = "7.5.2.4", version2 = "7.5.3"
        Выход: -1