Условие
Объявите абстрактный класс Shape с публичным виртуальным деструктором и чисто виртуальным методом double area() const. Создайте классы Rectangle и Circle, хранящие размеры в закрытых полях, заданных конструкторами. Площадь прямоугольника равна произведению сторон; площадь круга вычисляется с константой PI = 3.141592653589793.
Прочитайте описания фигур и сохраните объекты в std::vector<std::unique_ptr<Shape>>. Для создания используйте std::make_unique; подключите необходимые заголовки. Последовательно вызовите area() через общий интерфейс и найдите сумму площадей. Выбор формулы по текстовому типу допускается только при создании объекта; при вычислении площадей используйте виртуальные вызовы. Ресурсы должны освобождаться автоматически.
Ограничения
Время: 2 секунды. Память: 64 МиБ. Вывод: до 2 МиБ. Язык: C++17.
Входные данные
В первой строке вводится N. Следующие N строк имеют вид RECT width height или CIRCLE radius. Ограничения: 1 ≤ N ≤ 1000, 0 < width, height, radius ≤ 1000. Размеры вещественные, содержат не более двух знаков после десятичной точки.
Выходные данные
Сначала выведите N площадей в порядке ввода, каждую с новой строки. В следующей строке выведите их сумму. Все значения выводите с шестью знаками после десятичной точки.
Примеры
2 RECT 2 3 CIRCLE 1
6.000000 3.141593 9.141593
1 RECT 0.50 4
2.000000 2.000000
2 CIRCLE 2 CIRCLE 1
12.566371 3.141593 15.707963