Задача A. Горы в галактике Дзета

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

Условие

Известно, что некоторая галактика Дзета состоит из планет, поверхность которых является идеальной сферой. На всех этих планетах расположены несколько гор, которые являются конусами. Будем говорить, что точка является основанием горы, если она является центром круга в основании соответствующего конуса. Основание любой горы находится на поверхности сферы. Вершины гор расположены по направлению вектора, проведённого из центра планеты к основанию горы.

Юный программист Вася путешествует по галактике на космическом корабле и встречает одну из таких планет радиусом R, которая расположена в начале координат. В корабле нет иллюминаторов, зато есть камера с углом обзора 90 градусов, которая может фотографировать, а также транслировать изображение с соотношением сторон 1:1. Вася решает сделать фотографию планеты в тот момент, когда камера находилась в положении (xc, yc, zc) и была направлена в сторону вектора l⃗{xl, yl, zl}. Поскольку по пути космический корабль могло развернуть, то дополнительно укажем, что вертикальная ось камеры была направлена в сторону вектора u⃗{xu, yu, zu} (положительное направление вертикальной оси – проще говоря, «верх» камеры) (см. рис. 1). Известно, что на планете находятся N гор, каждая высотой hi, и основания которых в момент фотосъёмки были расположены в точках пространства {xi, yi, zi}.

Рис. 1
Рис. 2

Васе не терпится узнать, сколько и какие именно горы будет «видно» на его фотографии (рис. 2), и, пока изображение обрабатывается компьютером, он решил написать программу, чтобы выяснить это. Будем говорить, что гора «видна», если на фотографию попала её вершина. Помогите Васе написать программу, которая будет это определять.

Примечание

Гарантируется, что ни одна вершина горы в кадре не заслонена другой горой.

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

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

Каждая строка содержит соответственно:

В следующих N строках содержатся вещественные числа xi, yi, zi, hi – координаты оснований гор и их высоты.

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

В первой строке требуется вывести одно число k – количество гор, которые будут видны в кадре.

В следующих k строках требуется вывести номера (по возрастанию) видимых в кадре гор (горы нумеруются в том порядке, в котором они были расположены во входных данных, начиная с 1).

Ограничения

50R500

 − 5000xc, yc, zc, xl, yl, zl, xu, yu, zu, xi, yi, zi5000

R / 10hiR / 5

1N20

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

Входной файл (input.txt) Выходной файл (output.txt)
1
100
200 0 0
-3 0 0
0 0 3
2
-100 0 0 10
100 0 0 10
1
2
2
350
508 362 -32.1
-1.631764 -1.077921 0.4188476
0.4669206 0.4323552 2.931732
4
-339.0739 -86.76899 -0.2563334 35.68471
71.48166 340.9988 -33.31894 58.20355
143.9016 280.8656 151.3501 46.14721
37.14282 -338.9936 -78.76414 65.93442
2
2
3

Задача B. Спектральная классификация звёзд

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

Условие

Вам необходимо разработать фрагментный шейдер для визуализации звёзд в зависимости от температуры звезды T.

Спектральная классификация звёзд

красные звёзды
#FF0000
жёлтые звёзды
#FFFF00
белые звёзды
#FFFFFF
голубые звёзды
#0000FF

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

Рис. 1
Рис. 2

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

Во входном файле содержатся T — температура звезды.

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

Для прохождения тестов необходимо объявить переменную, в которую подставляются значения температур проверяющим модулем следующим образом:
uniform float T

В качестве решения следует отправлять файл формата FS (расширение .fs) на GLSL. В качестве среды разработки необходимо указывать Python.

Для тестирования работы фрагментного шейдера можете использовать онлайн средства, например, Shdr Editor

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

Входной файл (input.txt) Выходной файл (output.jpg)
1
6000
Смотри рис. 1
2
11000
Смотри рис. 2

Задача C. Старые лампы

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

Условие

Имеются 3 подключенных к одному контроллеру лампы. Левая (далее Л), средняя (далее С) и правая (далее П)

Каждая из ламп имеет некоторую, неизвестную заранее, яркость. Каждый такт загорается одна лампа, номер которой определяется неизменяющейся последовательностью. Алгоритм определения номера загорающейся лампы смотреть в файле SceneControlScript.cs. После чего у загоревшейся лампы снимается 1 единица яркости.

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

Для реализации алгоритма вам предоставляется сцена Unity, на которой расположены 3 источника света. Взаимодействие с ними реализовано в дополнительном объекте controller. Код с вашим алгоритмом должен находиться в предусмотренном классе Solution. Другие изменения в сцене учтены не будут.

Изначально сцена находится на паузе. Моделирование начнется как только вы вызовете controller.Resume(). Кроме того, лимит горения ламп может быть большим.

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

Вы можете тестировать свои решения, изменяя данные, содержащиеся в файле input.txt в коренном репозитории проекта.

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

Входной файл input.txt содержит строку состоящую из 3-х чисел, разделенных пробелами, x, y, z - определяющими начальную яркость для каждой из ламп Л, С, П соответственно.

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

Файл с решением должен содержать реализацию класса Solution. Количество секунд, полученное вашим решением, должно быть представлено целым числом. Ответ необходимо выводить при помощи controller.setAnswer(int answer).

Ограничения

0 ≤ x ≤ 106

0 ≤ y ≤ 106

0 ≤ z ≤ 106

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

Входной файл (input.txt) Выходной файл (output.txt)
1
1 1 1
3

0.507s 0.022s 25