Треугольник

advertisement
1.Треугольник
Имеется N отрезков, из которых нужно выбрать три отрезка так, чтобы
 из этих отрезков можно было сложить треугольник так, чтобы каждый отрезок являлся
стороной треугольника (отрезки надо использовать целиком – длины сторон
треугольника должны равняться длинам выбранных отрезков)
 площадь полученного треугольника была минимально возможной.
Напишите программу, которая находит квадрат площади этого треугольника.
Входные данные. В первой строке файла INPUT.TXT находится одно целое положительное
число N (3<=N<=10000) – количество отрезков. Каждая из следующих N строк содержит одно целое
положительное число Ki (0<Ki≤20000), в (i+1)–й строке находится квадрат длины i-го отрезка.
Гарантируется, что хотя бы один треугольник из данных отрезков сложить можно.
Выходные данные. В единственной строке файла OUTPUT.TXT следует выводить одно
положительное число ровно с четырьмя знаками после десятичной точки – квадрат площади
треугольника с наименьшей возможной площадью.
Указание. Квадрат площади треугольника выражается через длины сторон треугольника
формулой: S2=p*(p-a)*(p-b)*(p-c), где a, b, с – длины сторон треугольника,
p – его
полупериметр, p = (a+b+c)/2.
Примеры входных и выходных данных:
Input.txt
Output.txt
4
3
5
2
10
1.5000
Input.txt
Output.txt
5
77
3
4
2
7777
1.4375
Примечание
Квадраты длин сторон
этого треугольника равны
2, 3 и 5.
Примечание
Квадраты длин сторон
этого треугольника равны
2, 3 и 4.
2. Скобки
В некоторых языках программирования приходится ставить очень много скобок. Часто бывает
трудно сосчитать, сколько скобок открыто и сколько закрыто. Чтобы упростить запись, кроме
круглых скобок “(“ и “)”, используется правая квадратная скобка “]”. Правая квадратная скобка
закрывает все открытые на данный момент скобки, если такие имеются (если открытых скобок не
имеется, то выражение считается ошибочным).
Правильным скобочным выражением назовем строку символов, получающуюся из правильного
выражения после вычеркивания из него всех символов, кроме скобок “(“, “)” и “]”.
Например, правильными скобочными выражениями являются (()(()(()](), ((((((],
(())(). А вот примеры неправильных скобочных выражений: ())((((] – ошибка в третьем
символе, (())] – квадратной скобке нечего закрывать, ((])) – скобка, идущая вслед за
квадратной, не имеет открывающей пары.
Пустая строка является правильным скобочным выражением.
Напишите программу, которая для данной строки символов, состоящей только из символов “(“,
“)” и “]”, определяет, сколько имеется способов вычеркнуть некоторое количество (возможно, и 0)
символов так, чтобы оставшиеся символы образовывали правильное скобочное выражение.
Входные данные. В единственной строке файла INPUT.TXT находится не менее одного и не
более 768 символов “(“, “)” или “]”.
Выходные данные. В единственной строке файла OUTPUT.TXT должно находиться одно
целое положительное число – количество способов вычеркнуть символы в данной строке так, чтобы
получить правильное скобочное выражение.
Примеры
INPUT.TXT
OUTPUT.TXT
()()
5
INPUT.TXT
OUTPUT.TXT
)])]
1
INPUT.TXT
OUTPUT.TXT
(())]
11
3. Кабель
Плоский кабель длиной L метров состоит из 8 проводов, по которым передаются сигналы. С
кабелем выполняются две различные операции:
 Переключение. Операция состоит в том, что кабель в некотором месте разрезают, концы
проводов слева от разреза переставляют в некотором порядке, а затем сращивают
соответствующие провода.
 Проверка. Кабель разрезают в двух местах, на левом разрезе по первому (верхнему) проводу
подают сигнал 1, по второму – сигнал 2, и т.д. вплоть до самого нижнего провода, по которому
передают сигнал 8. На правом разрезе считывают полученные сигналы. После этого разрезы
сращивают, не изменяя порядка проводов.
Сначала все провода в кабеле параллельны.
Задана последовательность операций с кабелем. Требуется определить результаты
выполнения всех операций проверки.
Входные данные. В первой строке файла INPUT.TXT находятся два целых положительных
числа: L – длина кабеля в метрах (2<=L<=100000) и N – количество операций (1<=N<=100000).
Каждая из следующих N строк содержит описание одной операции.
Операция переключения начинается с символа S и имеет формат:
S m a1 a2 a3 a4 a5 a6 a7 a8
Здесь m (m – целое число, 0<m<=L): при переключении кабель разрезается на расстоянии (m-0.5)
метров от начала кабеля; ak – место, на котором будет стоять после перестановки k-ый провод.
Числа
8.
a1, a2, a3, a4, a5, a6, a7, a8
– попарно различные натуральные числа в диапазоне от 1 до
Пример переключения:
Если операция переключения производится на том месте, где уже ранее исполнялось
переключение, то результаты предыдущего переключения на этом месте аннулируются.
Операция проверки начинается с символа C и имеет формат:
C p q
Здесь p и q (p и q – целые числа, 0<=p<q<=L) – расстояние от начала кабеля (в метрах),
соответственно, до левого и правого разрезов.
Во входных данных любые два соседних числа или символа разделяются одним пробелом.
Выходные данные. Следует выводить у файл OUTPUT.TXT по одной строке на каждую
операцию проверки. Каждая строка должна содержать 8 чисел – номера сигналов при их
считывании (сверху вниз) на правом разрезе. Между числами в строке не должно быть никаких
разделителей.
Пример
INPUT.TXT
100 5
S 2 5 6 7 8 4 3 2 1
С 1 4
С 2 4
S 3 5 6 7 8 4 3 2 1
C 1 4
OUTPUT.TXT
87651234
12345678
43218765
Download