Задача A. Треугольник в параллелепипеде (ОНТИ)

Автор:А. Баранов   Ограничение времени:1 сек
Входной файл:Стандартный вход   Ограничение памяти:256 Мб
Выходной файл:Стандартный выход  
Максимальный балл:100  

Условие

Имеется параллелепипед со сторонами, параллельными осям координат: D = { (x, y, z): xmin ≤ x ≤ xmax, ymin ≤ y ≤ ymax, zmin ≤ z ≤ zmax} и некоторый треугольник T, заданный координатами своих вершин: (x1, y1, z1), (x2, y2, z2), (x3, y3, z3).

Требуется определить площадь части треугольника T, которая лежит внутри параллелепипеда D.

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

В начале входных данных записаны координаты двух наиболее удаленных вершин параллелепипеда: (xmin, ymin, zmin), (xmax, ymax, zmax).

Далее следуют координаты вершин треугольника: (x1, y1, z1), (x2, y2, z2), (x3, y3, z3).

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

Выходные данные должны содержать площадь, указанную с точностью до 5-го знака после запятой.

Ограничения

Вершины треугольника не лежат на одной прямой.

xmin ≤ xmax, ymin ≤ ymax, zmin ≤ zmax.

Примеры тестов

Стандартный вход Стандартный выход
1
-1.00000 -1.00000 -1.00000
 1.00000  1.00000  1.00000

-1.25000  0.56000  1.28090
-1.30000 -1.29010 -0.75000
 0.60790 -1.30700  1.30600
0.97386
2
-1.50000 -1.50000  1.00000
 0.50000  0.00000  1.50000

-3.70980  0.67000  3.20000
-4.60000 -1.86010  3.80250
 1.00000 -1.25000  4.10900
0.00000

Задача B. Русская изба

Автор:Ян Т.В.   Ограничение времени:5 сек
Входной файл:input.txt   Ограничение памяти:1512 Мб
Выходной файл:output.png  
Максимальный балл:100  

Условие

Вам необходимо разработать 3D модель избы.

Терминология

Стены сруба имеют одинаковую длину, длина одного бревна — 6 метров, диаметр — 40см, высота cруба — 3 метра. Модели бревен должны быть сглажены и состоять из минимально возможного количества полигонов. Нижнее основание избы должно лежать в плоскости XY, центр которой должен совпадать с началом координат. Стены, параллельные оси X, начинаются с плах. Дверь расположена со стороны отрицательной координаты оси Y на высоте 20см (радиус бревна). У избы есть 2 окна, в стенах, которые параллельны оси Y. Окна расположены на высоте двух бревен. Дверь и окна отцентрированы относительно стен, в которых они расположены. Толщина рамы окна — 10см и выступает рама на 10см от оконного стекла. Толщина дверной коробки — 10см м выступает она на 10см от двери.

Фронтоны крыши параллельны оси Y. Высота пика фронтона 4 метра. Высота от верхней точки фронтона до верхней точки кровли по Z — 20см. Нижняя часть кровли крыши выступает на 20см от стен. Расстояние от фронтона до краев крыши (козырек и кровля) — 40см.

Имеются рендеры из viewport с нескольких ракурсов в ортогональной проекции — Рис. 3, Рис. 4 и Рис. 5. Обратите внимание, что рендеры также несут дополнительную информацию о модели. В модели должны быть использованы материалы со следующими названиями: Door, FrameWindow, Glass, Roof, Wood. Модель не должна содержать текстур.

Модель проверяется на основе попиксельного сравнения рендеров с указанных во входном файле ракурсов. Используется этот материал. Файл с материалом должен называться solve.mtl. В качестве метрики для сравнения рендеров моделей используется величина dssim по каждому цветовому каналу. Баллы за каждый тест начисляются в зависимости от величины метрики.

Рис. 1
Рис. 2
Рис. 3
Рис. 4
Рис. 5

Источник света:

TypeSun
Color(255, 255, 255)
Specular1.00
Strength10.0
Location(10 m, -10 m, 20 m)
Rotation(30, 30, 0)

Камера:

Focal Length50mm

Render Engine: Eevee

Формат входного файла

Во входном файле содержатся x, y, z — координаты камеры в метрах и rx, ry, rz — углы поворота в радианах.

Формат выходного файла

В качестве решения следует отправлять файл формата OBJ (расширение .obj). Размер файла не должен превышать 999997 Байт.

Примеры тестов

Входной файл (input.txt) Выходной файл (output.png)
1
12.106017 -21.362740 7.596452
1.352770 -0.016627 0.518276
Смотри рис. 1
2
-7.702930 -14.359091 0.718060
1.719138 -0.042989 -0.500862
Смотри рис. 2

Задача C. Темный лабиринт

Автор:Maxim Kuzin   Ограничение времени:30 сек
Входной файл:input.txt   Ограничение памяти:256 Мб
Выходной файл:output.txt  
Максимальный балл:100  

Условие

Представьте, что вы потерялись в лабиринте и не можете найти выход. А еще там абсолютная темнота и вы ничего не видите.

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

Чтобы упростить задачу, вам предлагается сцена в Unity с лабиринтом и шаром. Вы можете указать время и вектор скорости для шара. В течении указанного вами времени шар будет двигаться в направлении вектора с заданной скоростью без ускорения. По истечении этого времени вам опять дадут возможность указать новое время и вектор скорости.

Вы можете управлять шаром только когда задаете ему новую скорость. В этот же момент вы можете узнать его текущие координаты. Пока шар двигается вы не можете узнать его местоположение.

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

Вам нужно реализовать функцию getMove() в классе Solution. Эту функция будет вызываться чтобы дать вам возможность указать новое время и вектор скорости для шара. Эта функция должна возвращать объект Vector4 состоящий из четырех параметров. Первые три отвечают за вектор скорости (y-координата будет игнорироваться), четвертый за время, в течении которого будет двигаться шар. После того, как это время закончится вам опять дадут возможность указать новое время и вектор скорости. Длина вашего вектора скорости не должна превышать 104

Обратите внимание, что вы не можете сохранять какую-либо информацию между двумя вызовами функции. Для этого нужно использовать специальные методы в объекте controller.

Весь ваш код должен находиться в классе Solution. Другие изменения в сцене учитываться не будут. Объект controller предоставляет следующие функции для работы с памятью:

Проект https://github.com/Supermagzzz/NTI_TASK2, Вам осталось реализовать класс Solution.

Одна клетка на поле имеет размер 44 единицы Unity.

Вы можете тестировать свои решения, изменяя данные, содержащиеся в файле input.txt в репозитории проекта. Красная клетка в редакторе Unity показывает выход из лабиринта. Изучите пример Solution.cs для лучшего понимания задачи.

Формат входного файла

Входной файл содержит пять целых чисел seed, r, c, x, y - значение для случайной генерации лабиринта, количество строк и столбцов в лабиринте, координаты выхода из лабиринта. Реализовывать считывание данных с файла input.txt не нужно. Для получения данных используйте функции, реализованные в controller.

Формат выходного файла

Файл с решением должен содержать реализацию класса Solution. Координаты, полученные с помощью вашего решения, должны иметь погрешность не больше одной единицы в координатах Unity. Реализовывать вывод в файл output.txt не нужно.

Ограничения

1 ≤ r, c ≤ 10

0 ≤ x ≤ r

0 ≤ y ≤ c


Задача D. Пересечение двух тетраэдров (ОНТИ)

Автор:А. Баранов   Ограничение времени:1 сек
Входной файл:Стандартный вход   Ограничение памяти:256 Мб
Выходной файл:Стандартный выход  
Максимальный балл:100  

Условие

Имеются два трехмерных симплекса (тетраэдра), каждый из которых задан координатами четырех своих вершин:

(x1, y1, z1), (x2, y2, z2), (x3, y3, z3), (x4, y4, z4).

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

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

Во входных данных последовательно записаны координаты сначала первого, а затем второго тетраэдра.

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

Выходные данные должны содержать ответ, указанный с точностью до 5-го знака после запятой.

Ограничения

Вершины отдельно взятого тетраэдра не лежат в одной плоскости.

 − 10 < (xi, yi, zi) < 10.

Примеры тестов

Стандартный вход Стандартный выход
1
-1.00000 -1.00000  0.00000
 2.00000  0.00000  0.00000
 0.00000  0.00000  2.00000
 0.00000  2.00000  0.00000

 2.00000  0.00000  0.00000
 1.00000  1.00000  2.50000
 0.00000  0.00000  0.00000
 1.00000  2.00000  0.00000
0.49383
2
-1.00000  1.00000  3.80960
 0.00000  1.50000  1.50000
 3.00000 -1.00000  0.00000
 0.00000  2.50000  4.00000

-2.00000  3.00000 -0.50000
 3.00000  4.00000  0.00000
 2.50000  3.00000  1.00000
 3.00000  4.00000  3.60700
0.00000

0.520s 0.012s 33