---> 2 задач <---
Источники
    Личные олимпиады(938 задач)
    Командные олимпиады(684 задач)
Страница: 1 Отображать по:
ограничение по времени на тест
1.0 second;
ограничение по памяти на тест
256 megabytes

Юная программистка Агнесса недавно узнала на уроке информатики об арифметических выражениях. Она заинтересовалась вопросом, что случится, если из арифметического выражения удалить всё, кроме скобок. Введя запрос в своём любимом поисковике, она выяснила, что математики называют последовательности скобок, которые могли бы встречаться в некотором арифметическом выражении, правильными скобочными последовательностями.

Так, последовательность ()(()) является правильной скобочной последовательностью, потому что она может, например, встречаться в выражении (2+2) : (3–(5–2)+4), а последовательности (() и ())( не являются таковыми. Легко видеть, что существует пять правильных скобочных последовательностей, состоящих ровно из шести скобок (по три скобки каждого типа — открывающих и закрывающих): ((())), (()()), (())(), ()(()) и ()()().

Агнесса заинтересовалась простейшими преобразованиями правильных скобочных последовательностей. Для начала Агнесса решила ограничиться добавлением скобок в последовательность. Она очень быстро выяснила, что после добавления одной скобки последовательность перестаёт быть правильной, а вот добавление двух скобок иногда сохраняет свойство правильности. Например, при добавлении двух скобок в различные места последовательности ()() можно получить последовательности (()()), (())(), ()(()) и ()()(). Легко видеть, что при любом способе добавления двух скобок с сохранением свойства правильности одна из новых скобок должна быть открывающей, а другая — закрывающей.

Агнесса хочет подсчитать количество различных способов добавления двух скобок в заданную правильную скобочную последовательность так, чтобы снова получилась правильная скобочная последовательность. К сожалению, выяснилось, что это количество может быть в некоторых случаях очень большим. Агнесса различает способы получения последовательности по позициям добавленных скобок в полученной последовательности. Например, даже при добавлении скобок в простейшую последовательность () можно получить другую правильную скобочную последовательность семью способами: ()(), (()), (()), (()), (()), ()(), ()(). Здесь добавленные скобки выделены жирным шрифтом.

Таким образом, если в полученной последовательности добавленная открывающая скобка стоит в позиции \(i\), а добавленная закрывающая — в позиции \(j\), то два способа, соответствующие парам \((i_1, j_1)\) и \((i_2, j_2)\), считаются различными, если \(i_1\neq i_2\) или \(j_1\neq j_2\).

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

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

Входной файл состоит из одной непустой строки, содержащей ровно \(2n\) символов: \(n\) открывающих и \(n\) закрывающих круглых скобок. Гарантируется, что эта строка является правильной скобочной последовательностью.

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

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

Подзадачи и система оценки

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

Подзадача 1 (40 баллов)

Величина \(n\) (количество скобок каждого типа) не превосходит 50.

Подзадача 2 (30 баллов)

Величина \(n\) (количество скобок каждого типа) не превосходит 2500.

Подзадача 3 (30 баллов)

Величина \(n\) (количество скобок каждого типа) не превосходит 50 000.

Примеры
Входные данные
()
Выходные данные
7
Входные данные
()()
Выходные данные
17
Входные данные
(())
Выходные данные
21
ограничение по времени на тест
0.5 second;
ограничение по памяти на тест
256 megabytes

Мислав и Мирко разработали новую игру под названием повороты.

Сначала Мирко выбирает последовательность чисел длины \(n\) и число \(k\) и разбивает последовательность на секции, каждая из которых содержит \(k\) чисел (\(n\) делится на \(k\)). Первая секция содержит первые \(k\) позиций в последовательности, вторая секция содержит последующие \(k\) позиций в последовательности и так далее.

После этого Мирко начинает применять различные операции на данной последовательности. Есть два типа операций:

1. Совершить циклический сдвиг элементов последовательности чисел в каждой секции на \(x\) влево или вправо.

2. Совершить циклический сдвиг элементов последовательности чисел целиком на \(x\) влево или вправо.

Заметим, что операция типа 2 может изменить то, к какой секции принадлежит какое число.

После применения всех операций, Мирко сообщает Миславу получившуюся последовательность и применённые операции. Задача Мислава заключается в том, чтобы восстановить исходную последовательность. Он попросил вас о помощи.

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

Первая строка ввода содержит три целых числа \(n\), \(k\), \(q\) (\(1 \le n \le 100000; 1 \le k \le 100000; 1 \le q \le 100000\)) - длину последовательности, длину каждой секции и количество применённых операций соответственно.

Последующие \(q\) строк содержат описание выполненных операций. Каждая из последующих \(q\) строк содержит два целых числа \(a\) (\(1 \le a \le 2\)) - тип операции, и \(x\) (\(-100000 \le x \le 100000\)) - число позиций, на которое был произведен циклический сдвиг. Если число \(x\) отрицательно, надо производить циклический сдвиг на \(|x|\) элементов влево, иначе - на \(|x|\) элементов вправо.

Последняя строка содержит \(n\) целых чисел, \(i\)-е из которых - это число, которое будет стоять на \(i\)-й позиции после выполнения операций из условия.

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

В единственной строке выведите \(n\) чисел - исходную последовательность.

Система оценки

Подзадача 1 (15 баллов): (\(n \le 100\))

Подзадача 2 (20 баллов): (\(k \le 100\))

Подзадача 3 (65 баллов): без дополнительных ограничений

Примеры
Входные данные
4 2 2
2 2
1 1
3 2 1 0
Выходные данные
0 1 2 3 
Входные данные
8 4 4
1 3
1 15
1 -5
2 -1
6 10 14 19 2 16 17 1
Выходные данные
6 10 14 1 2 16 17 19 
Входные данные
9 3 5
1 1
2 -8
2 9
1 1
2 -4
3 1 8 7 4 5 2 6 9
Выходные данные
5 3 6 9 7 1 8 2 4 

Страница: 1 Отображать по:
Выбрано
:
Отменить
|
Добавить в контест