Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 100 |
Требуется реализовать классификатор, использующий алгоритм One Rule.
Первая строка входных данных содержит два целых числа N и K — количество примеров в обучающей выборке и количество признаков соответственно.
Вторая строка содержит K слов, разделённых пробелом — названия признаков объектов.
Следующие N строк содержат обучающую выборку, каждая строка содержит по K + 1 слов, первые K слов описывают значения признаков, слово номер K + 1 содержит метку класса — 0 или 1.
Следующая строка содержит одно целое число M — количество примеров в тестовой выборке.
Далее идёт тестовая выборка, содержащая M строк по K слов. Гарантируется, что каждое значение каждого признака встречается в обучающей выборке хотя бы один раз.
Выходные данные должны содержать M чисел — результаты классификации алгоритма One Rule после обучения на первых N примерах.
В случае если несколько признаков дают одинаковый результат на обучающей выборке, то следует выбрать тот, который встречается раньше.
Если по какому-то значению можно с одинаковой вероятностью предсказать как 0 так и 1, то следует предсказывать 1.
1 ≤ N, M, K ≤ 100
Суммарная длина строк не превосходит 105
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Имеется фиксированная неизвестная функция f(x), она одинаковая для всех тестов. Даны значения функции f(x), f(x + 1), f(x + 2), …, f(x + N − 1). Требуется определить значение функции f в точке x + N.
Для понимания структуры функции следует воспользоваться двумя тестами: первый из них приведён в примере. Второй тест можно скачать ЗДЕСЬ.
Первая строка входного файла содержит одно целое число N.
Вторая строка входного файла содержит N вещественных чисел — значения функции f в точках x, x + 1, x + 2, …, x + N − 1.
Выходной файл должен содержать одно число — f(x + N) с точностью не менее двух знаков после запятой.
3 ≤ N ≤ 105
− 108 ≤ x ≤ 108
− 109 ≤ f(x) ≤ 109
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
Автор: | А. Могилёвкин | Ограничение времени: | 1 сек | |
Входной файл: | data.csv | Ограничение памяти: | 256 Мб | |
Выходной файл: | Стандартный выход | |||
Максимальный балл: | 4 |
Требуется на языке Python реализовать функцию
get_businessmen(df: pd.DataFrame)
Функция принимает на вход объект DataFrame
библиотеки
Pandas и возвращает DataFrame
пользователей,
совершивших 20 и более международных звонков.
В объекте DataFrame
присутствуют следующие поля:
ID
— идентификатор пользователя, целое уникальное число
Total day minutes
— сумма минут дневных звонков, вещественное число
Total day calls
— количество дневных звонков, целое число
Total night minutes
— сумма минут ночных звонков, вещественное число
Total night calls
— количество ночных звонков, целое число
Total intl minutes
— сумма минут международных звонков, вещественное число
Total intl calls
— количество международных звонков, целое число
Customer service calls
— количество обращений в техническую поддержку, целое число
Функция имеет следующий интерфейс
import pandas as pd
def get_businessmen(df: pd.DataFrame) -> pd.DataFrame:
"""
Возвращает DataFrame, оставляя в нём только пользователей из df,
совершивших 20 и более международных звонков
Параметры:
df: исходный DataFrame
Возвращаемое значение:
отфильтрованный DataFrame
"""
pass
Код решения должен содержать импортируемые модули, определение и реализацию функции.
№ | Входной файл (data.csv ) |
Стандартный выход |
---|---|---|
1 |
|
|
Автор: | А. Могилёвкин | Ограничение времени: | 1 сек | |
Входной файл: | data.csv | Ограничение памяти: | 256 Мб | |
Выходной файл: | Стандартный выход | |||
Максимальный балл: | 4 |
Требуется на языке Python реализовать функцию get_busiest_states(data: pd.DataFrame)
Функция принимает на вход объект DataFrame и возвращает Series, отсортированный по убыванию, в котором штаты являются индексами, а значения — количеством международных звонков в данном штате.
Функция имеет следующий интерфейс
import pandas as pd
def get_busiest_states(data: pd.DataFrame) -> pd.Series:
"""
Вычисляет Series, в котором индексы - наименования штатов, а значение - количество совершённых международных звонов.
Параметры:
data: DataFrame с данными
Возвращаемое значение:
Series отсортированный по убыванию значений.
"""
pass
Код решения должен содержать импортируемые модули, определение и реализацию функции.
№ | Входной файл (data.csv ) |
Стандартный выход |
---|---|---|
1 |
|
|
Автор: | А. Могилёвкин | Ограничение времени: | 1 сек | |
Входной файл: | data.csv | Ограничение памяти: | 256 Мб | |
Выходной файл: | Стандартный выход | |||
Максимальный балл: | 4 |
Требуется на языке Python реализовать функцию join_dataframes(users_df: pd.DataFrame, states_df: pd.DataFrame)
Функция принимает на вход два объекта DataFrame и возвращает объединённый DataFrame пользователей и штатов.
Функция имеет следующий интерфейс
import pandas as pd
def join_dataframes(data: pd.DataFrame, states: pd.DataFrame) -> pd.DataFrame:
"""
Возвращает объединённый DataFrame
Параметры:
data: DataFrame с пользователями
states: DataFrame с штатами
Возвращаемое значение:
объединённый DataFrame, содержащий поля 'Total day calls', 'Total night calls', 'State' в данном порядке
"""
pass
Код решения должен содержать импортируемые модули, определение и реализацию функции.
№ | Входной файл (data.csv ) |
Стандартный выход |
---|---|---|
1 |
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 256 Мб | |
Максимальный балл: | 1 |
Требуется на языке Python реализовать функцию fillna_date
. Функция должна иметь следующий интерфейс:
import pandas as pd
def fillna_date(data: pd.DataFrame, function: str = 'mean') -> pd.DataFrame:
'''Fills NaN values in every column in `data` with values obtained by applying aggregate `function` over a month.
If every value within a month is NaN the fill value is obtained over a year.
If every value within a year is NaN the fill value is obtained over the whole column.
Arguments:
data: a pandas DataFrame, with datetime index
function: aggregate function to be used for obtaining fill value.
Possible values are: "mean", "median", "max", "min"
Returns:
a new pandas DataFrame with NaN values replaced
'''
pass
Датафрейм data
содержит несколько вещественнозначных колонок, индексируемых объектами типа datetime
. Функция fillna_date
заменяет значения NaN
в каждом столбце датафрейма data
на значение, полученное путём применения функции агрегации function
внутри соответствующего месяца. Если все значения в этом месяцы равны NaN
, новое значение получается из соответствующего года. Если же и все значения в году равны NaN
, значение получается из всего столбца. Гарантируется, что в каждом столбце хотя бы одно значение не равно NaN
.
Допустимыми значениями параметра function
являются строки: "mean", "median", "max", "min"
.
При решении задачи запрещено применять операторы циклов и условий языка Python для обработки датафрейма.
Входные данные из примера можно скачать здесь.
Код решения должен содержать только импортируемые модули, определение и реализацию класса.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 | data = pd.read_csv('input.csv', index_col='date')
data = fillna_date(data)
data.to_csv('output.csv')
|
output.csv |
Входной файл: | Стандартный вход | Ограничение времени: | 2 сек | |
Выходной файл: | output.png | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 4 |
Требуется реализовать на языке Python функцию
import matplotlib.pyplot
def draw(plt: matplotlib.pyplot, x: list) -> None:
pass
Функция принимает на вход объект pyplot
и массив координат на оси абсцисс x
.
Функция должна нарисовать график x3 − 2x2 + 50sin(5x) + 3 в указанных точках.
График должен быть нарисован зелёным цветом 'green'
и содержать координатную сетку. Оси должны быть подписаны, выражение для оси ординат должно быть выражением на языке LaTeX, таким же, как в тексте задачи, в inline режиме отображения математических выражений $...$
.
Код решения должен содержать только реализацию функции. Код НЕ должен самостоятельно сохранять изображение в файл или выводить изображение на экран.
Входной файл: | Стандартный вход | Ограничение времени: | 3 сек | |
Выходной файл: | output.png | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 10 |
Требуется реализовать на языке Python функцию, отображающую оценку плотности распределения столбца данных. Функция должна иметь следующий интерфейс
import pandas as pd
from typing import Union
def draw_pdf(data: pd.DataFrame, column: str, bins: Union[int, str] = 10) -> None:
"""
Отображает оценку плотности распределения столбца данных
Параметры:
data: таблица данных.
column: название столбца для отображения.
bins: спецификация интервалов разбиения, аналогично matplotlib.pyplot.hist.
"""
pass
Стиль оформления графика (цвета, границы, толщину линий, подписи и т.п.) должен соответствовать представленному ниже. Границы значений оси абсцисс должны быть равны минимальному и максимальному значению отображаемого столбца.
Код решения должен содержать только реализацию функции и импортируемые модули. Код НЕ должен самостоятельно создавать фигуры или сохранять изображение в файл.
№ | Стандартный вход | Выходной файл (output.png ) |
---|---|---|
1 |
data.csv
data = pd.read_csv('data.csv')
plt.figure(figsize=(10, 5))
plt.rcParams.update({'font.size': 14})
draw_pdf(data, 'Account length', 'sturges')
plt.savefig('output.png')
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 3 сек | |
Выходной файл: | output.png | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 8 |
Требуется реализовать на языке Python функцию, отображающую долю целевых значений при каждом уникальном значении категориального признака. Функция должна иметь следующий интерфейс
import pandas as pd
def draw_bars(data: pd.DataFrame, column: str, target_column: str) -> None:
"""
Отображает долю целевых значений `target_column` при каждом уникальном значении категориального признака `column` в виде слолбчатой диаграммы.
Параметры:
data: таблица данных.
column: название категориального признака.
target_column: название целевой переменной.
"""
pass
Стиль оформления графика (цвета, границы, подписи, ширина колонок и т.п.) должен соответствовать представленному ниже. Цвета столбцов должны быть получены из палитры tab10
. Вклад долей менее 5% не должен быть подписан на графике.
Код решения должен содержать только реализацию функции и импортируемые модули. Код НЕ должен самостоятельно создавать фигуры или сохранять изображение в файл.
№ | Стандартный вход | Выходной файл (output.png ) |
---|---|---|
1 |
data.csv
data = pd.read_csv('data.csv')
plt.figure(figsize=(10, 5))
plt.rcParams.update({ 'font.size': 8 })
draw_bars(data, 'Customer service calls', 'Churn')
plt.savefig('output.png')
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать класс на языке Python, который соответствует следующему интерфейсу.
class GradientOptimizer:
def __init__(self, oracle, x0):
self.oracle = oracle
self.x0 = x0
def optimize(self, iterations, eps, alpha):
pass
В конструктор принимаются два аргумента — оракул, с помощью которого можно получить градиент оптимизируемой функции, а также точку, с которой необходимо начать градиентный спуск.
Метод optimize
принимает максимальное число итераций для критерия остановки,
L2-норму градиента, которую можно считать оптимальной,
а также learning rate. Метод возвращает оптимальную точку.
Оракул имеет следующий интерфейс:
class Oracle:
def get_func(self, x): pass
def get_grad(self, x): pass
x
имеет тип np.array
вещественных чисел.
Код должен содержать только класс и его реализацию. Он не должен ничего выводить на экран.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать на языке Python класс GDM
, который описывает алгоритм градиентного спуска с моментом и имеет следующий интерфейс:
import numpy as np
class GDM:
'''Represents a Gradient Descent with Momentum optimizer
Fields:
eta: learning rate
alpha: exponential decay factor
'''
eta: float
alpha: float
def __init__(self, *, alpha: float = 0.9, eta: float = 0.1):
'''Initalizes `eta` and `alpha` fields'''
raise NotImplementedError()
def optimize(self, oracle: Oracle, x0: np.ndarray, *,
max_iter: int = 100, eps: float = 1e-5) -> np.ndarray:
'''Optimizes a function specified as `oracle` starting from point `x0`.
The optimizations stops when `max_iter` iterations were completed or
the L2-norm of the gradient at current point is less than `eps`
Args:
oracle: function to optimize
x0: point to start from
max_iter: maximal number of iterations
eps: threshold for L2-norm of gradient
Returns:
A point at which the optimization stopped
'''
raise NotImplementedError()
Параметрами алгоритма являются:
alpha
— скорость затухания момента,eta
— learning rate.oracle
— оптимизируемая функция,x0
— начальная точка,max_iter
— максимальное количество итераций,eps
— пороговое значение L2 нормы градиента.max_iter
количества итераций или при достижении точки, в которой L2 норма градиента меньше eps
.
Класс Oracle
описывает оптимизируемую функцию:
import numpy as np
class Oracle:
'''Provides an interface for evaluating a function and its derivative at arbitrary point'''
def value(self, x: np.ndarray) -> float:
'''Evaluates the underlying function at point `x`
Args:
x: a point to evaluate funciton at
Returns:
Function value
'''
raise NotImplementedError()
def gradient(self, x: np.ndarray) -> np.ndarray:
'''Evaluates the underlying function derivative at point `x`
Args:
x: a point to evaluate derivative at
Returns:
Function derivative
'''
raise NotImplementedError()
Код решения должен содержать только определение и реализацию класса.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать на языке Python класс NesterovAG
, который описывает алгоритм ускоренного градиента Нестерова и имеет следующий интерфейс
import numpy as np
class NesterovAG:
'''Represents a Nesterov Accelerated Gradient optimizer
Fields:
eta: learning rate
alpha: exponential decay factor
'''
eta: float
alpha: float
def __init__(self, *, alpha: float = 0.9, eta: float = 0.1):
'''Initalizes `eta` and `aplha` fields'''
raise NotImplementedError()
def optimize(self, oracle: Oracle, x0: np.ndarray, *,
max_iter: int = 100, eps: float = 1e-5) -> np.ndarray:
'''Optimizes a function specified as `oracle` starting from point `x0`.
The optimizations stops when `max_iter` iterations were completed or
the L2-norm of the current gradient is less than `eps`
Args:
oracle: function to optimize
x0: point to start from
max_iter: maximal number of iterations
eps: threshold for L2-norm of gradient
Returns:
A point at which the optimization stopped
'''
raise NotImplementedError()
Параметрами алгоритма являются:
alpha
— скорость затухания момента,eta
— learning rate.oracle
— оптимизируемая функция,x0
— начальная точка,max_iter
— максимальное количество итераций,eps
— пороговое значение L2 нормы градиента.max_iter
количества итераций или при достижении точки, в которой L2 норма градиента меньше eps
.
Класс Oracle
описывает оптимизируемую функцию
import numpy as np
class Oracle:
'''Provides an interface for evaluating a function and its derivative at arbitrary point'''
def value(self, x: np.ndarray) -> float:
'''Evaluates the underlying function at point `x`
Args:
x: a point to evaluate funciton at
Returns:
Function value
'''
raise NotImplementedError()
def gradient(self, x: np.ndarray) -> np.ndarray:
'''Evaluates the underlying function derivative at point `x`
Args:
x: a point to evaluate derivative at
Returns:
Function derivative
'''
raise NotImplementedError()
Код решения должен содержать только определение и реализацию класса.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать на языке Python класс AdaGrad
, который описывает алгоритм адаптивного градиентного спуска и имеет следующий интерфейс
import numpy as np
class AdaGrad:
'''Represents an AdaGrad optimizer
Fields:
eta: learning rate
epsilon: smoothing term
'''
eta: float
epsilon: float
def __init__(self, *, eta: float = 0.1, epsilon: float = 1e-8):
'''Initalizes `eta` and `epsilon` fields'''
raise NotImplementedError()
def optimize(self, oracle: Oracle, x0: np.ndarray, *,
max_iter: int = 100, eps: float = 1e-5) -> np.ndarray:
'''Optimizes a function specified as `oracle` starting from point `x0`.
The optimizations stops when `max_iter` iterations were completed or
the L2-norm of the gradient at current point is less than `eps`
Args:
oracle: function to optimize
x0: point to start from
max_iter: maximal number of iterations
eps: threshold for L2-norm of gradient
Returns:
A point at which the optimization stopped
'''
raise NotImplementedError()
Параметрами алгоритма являются:
eta
— learning rate,epsilon
— сглаживающий коэффициент.oracle
— оптимизируемая функция,x0
— начальная точка,max_iter
— максимальное количество итераций,eps
— пороговое значение L2 нормы градиента.max_iter
количества итераций или при достижении точки, в которой L2 норма градиента меньше eps
.
Класс Oracle
описывает оптимизируемую функцию
import numpy as np
class Oracle:
'''Provides an interface for evaluating a function and its derivative at arbitrary point'''
def value(self, x: np.ndarray) -> float:
'''Evaluates the underlying function at point `x`
Args:
x: a point to evaluate funciton at
Returns:
Function value
'''
raise NotImplementedError()
def gradient(self, x: np.ndarray) -> np.ndarray:
'''Evaluates the underlying function derivative at point `x`
Args:
x: a point to evaluate derivative at
Returns:
Function derivative
'''
raise NotImplementedError()
Код решения должен содержать только определение и реализацию класса.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать на языке Python класс RMSProp
, который описывает одноименный алгоритм и имеет следующий интерфейс
import numpy as np
class RMSProp:
'''Represents an RMSProp optimizer
Fields:
eta: learning rate
gamma: exponential decay factor
epsilon: smoothing term
'''
eta: float
gamma: float
epsilon: float
def __init__(self, *, eta: float = 0.1, gamma: float = 0.9, epsilon: float = 1e-8):
'''Initalizes `eta`, `gamma` and `epsilon` fields'''
raise NotImplementedError()
def optimize(self, oracle: Oracle, x0: np.ndarray, *,
max_iter: int = 100, eps: float = 1e-5) -> np.ndarray:
'''Optimizes a function specified as `oracle` starting from point `x0`.
The optimizations stops when `max_iter` iterations were completed or
the L2-norm of the gradient at current point is less than `eps`
Args:
oracle: function to optimize
x0: point to start from
max_iter: maximal number of iterations
eps: threshold for L2-norm of gradient
Returns:
A point at which the optimization stopped
'''
raise NotImplementedError()
Параметрами алгоритма являются:
eta
— learning rate,gamma
— коэффициент затухания,epsilon
— сглаживающий коэффициент.oracle
— оптимизируемая функция,x0
— начальная точка,max_iter
— максимальное количество итераций,eps
— пороговое значение L2 нормы градиента.max_iter
количества итераций или при достижении точки, в которой L2 норма градиента меньше eps
.
Класс Oracle
описывает оптимизируемую функцию
import numpy as np
class Oracle:
'''Provides an interface for evaluating a function and its derivative at arbitrary point'''
def value(self, x: np.ndarray) -> float:
'''Evaluates the underlying function at point `x`
Args:
x: a point to evaluate funciton at
Returns:
Function value
'''
raise NotImplementedError()
def gradient(self, x: np.ndarray) -> np.ndarray:
'''Evaluates the underlying function derivative at point `x`
Args:
x: a point to evaluate derivative at
Returns:
Function derivative
'''
raise NotImplementedError()
Код решения должен содержать только определение и реализацию класса.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать на языке Python класс Adam
, который описывает одноименный алгоритм и имеет следующий интерфейс
import numpy as np
class Adam:
'''Represents an Adam optimizer
Fields:
eta: learning rate
beta1: first moment decay rate
beta2: second moment decay rate
epsilon: smoothing term
'''
eta: float
beta1: float
beta2: float
epsilon: float
def __init__(self, *, eta: float = 0.1, beta1: float = 0.9, beta2: float = 0.999, epsilon: float = 1e-8):
'''Initalizes `eta`, `beta1` and `beta2` fields'''
raise NotImplementedError()
def optimize(self, oracle: Oracle, x0: np.ndarray, *,
max_iter: int = 100, eps: float = 1e-5) -> np.ndarray:
'''Optimizes a function specified as `oracle` starting from point `x0`.
The optimizations stops when `max_iter` iterations were completed or
the L2-norm of the gradient at current point is less than `eps`
Args:
oracle: function to optimize
x0: point to start from
max_iter: maximal number of iterations
eps: threshold for L2-norm of gradient
Returns:
A point at which the optimization stopped
'''
raise NotImplementedError()
Параметрами алгоритма являются:
eta
— learning rate,beta1
— коэффициент затухания первого момента,beta2
— коэффициент затухания второго момента,epsilon
— сглаживающий коэффициент.oracle
— оптимизируемая функция,x0
— начальная точка,max_iter
— максимальное количество итераций,eps
— пороговое значение L2 нормы градиента.max_iter
количества итераций или при достижении точки, в которой L2 норма градиента меньше eps
.
Класс Oracle
описывает оптимизируемую функцию
import numpy as np
class Oracle:
'''Provides an interface for evaluating a function and its derivative at arbitrary point'''
def value(self, x: np.ndarray) -> float:
'''Evaluates the underlying function at point `x`
Args:
x: a point to evaluate funciton at
Returns:
Function value
'''
raise NotImplementedError()
def gradient(self, x: np.ndarray) -> np.ndarray:
'''Evaluates the underlying function derivative at point `x`
Args:
x: a point to evaluate derivative at
Returns:
Function derivative
'''
raise NotImplementedError()
Код решения должен содержать только определение и реализацию класса.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать следующие функции на языке Python.
def linear_func(theta, x) # function value
def linear_func_all(theta, X) # 1-d np.array of function values of all rows of the matrix X
def mean_squared_error(theta, X, y) # MSE value of current regression
def grad_mean_squared_error(theta, X, y) # 1-d array of gradient by theta
theta
— одномерный np.array
x
— одномерный np.array
X
— двумерный np.array
. Каждая строка соответствует по размерности вектору theta
y
— реальные значения предсказываемой величины
Матрица X имеет размер M × N. M строк и N столбцов.
Используется линейная функция вида: hθ(x) = θ1 x1 + θ2 x2 + ... + θn xN
Mean squared error (MSE) как функция от θ: J(θ) = 1MM∑i = 1(yi − hθ(x(i)))2. Где x(i) — i-я строка матрицы X
Градиент функции MSE: ∇ J(θ) = { ∂ J∂ θ1, ∂ J∂ θ2, ..., ∂ J∂ θN}
X = np.array([[1,2],[3,4],[4,5]])
theta = np.array([5, 6])
y = np.array([1, 2, 1])
linear_func_all(theta, X) # --> array([17, 39, 50])
mean_squared_error(theta, X, y) # --> 1342.0
grad_mean_squared_error(theta, X, y) # --> array([215.33333333, 283.33333333])
Код должен содержать только реализацию функций.
Входной файл: | Стандартный вход | Ограничение времени: | 10 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать функцию на языке Python, которая находит линейную регрессию заданных векторов, используя метрику MSE.
def fit_linear_regression(X, y) # np.array of linear regression coefs
X
— двумерный np.array
. Каждая строка соответствует отдельному примеру.
y
— реальные значения предсказываемой величины
Код должен содержать только реализацию функций.
Автор: | Учебное задание | Ограничение времени: | 1 сек | |
Входной файл: | input.txt | Ограничение памяти: | 512 Мб | |
Выходной файл: | output.txt | |||
Максимальный балл: | 1 |
Некоторая теоретическая модель предполагает зависимость переменной Y от переменной X по следующему закону: Y = a * X2 + b * X + c.
Требуется по N наблюдениям методом наименьших квадратов оценить параметры a, b и c данной модели.
Первая строка входного файла содержит одно целое число N.
Следующие N строк содержат по два числа — xi и yi
Выходной файл должен содержать три вещественных числа a, b и c с точностью до двух знаков после десятичной точки.
3 ≤ N ≤ 1000
1 ≤ |xi|, |yi| ≤ 5000
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
2 |
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Пусть имеется задача регрессии f(x) = a ⋅ x + b ≈ y. Требуется найти коэффициенты регрессии a, такие, что |{ai | ai ∈ a, ai = 0}| = k, 0 < k ⩽ |a| = m. При этом должно выполняться условие R2 = 1 − n∑i = 1(yi − f(Xi))2n∑i = 1(yi − y)2 ⩾ s. При решении задачи предполагается использование алгоритма Lasso.
Данные для обучения содержатся в файле. Качество модели будет рассчитано на скрытом наборе данных
Первая строка входных данных содержит натуральное число N — количество тестов. В следующих N блоках содержится описание тестов. Первая строка блока содержит целые числа n — количество примеров обучающей выборки, m — размерность пространства, k — необходимое количество нулевых коэффициентов, и вещественное число s — минимальное значение метрики R2. Следующие n строк содержат по m + 1 вещественному числу — координаты точки пространства и значение целевой переменной y.
Решение должно представлять собой текстовый файл содержащий N строк — коэффициенты a и b линейной регрессии разделённые символом пробел.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется на языке Python реализовать методы точечного кроссовера.
Функция single_point_crossover(a, b, point)
выполняет одноточечный кроссовер, значения справа от точки кроссовера меняются местами.
Функция two_point_crossover(a, b, first, second)
выполняет двухточечный кроссовер, значения между точек кроссовера меняются местами.
Функция k_point_crossover(a, b, points)
выполняет k-точечный кроссовер, значения между каждой чётной парой точек меняются местами.
Функции должны иметь следующий интерфейс
import numpy as np
def single_point_crossover(a: np.ndarray, b: np.ndarray, point: int) -> tuple[np.ndarray, np.ndarray]:
"""Performs single point crossover of `a` and `b` using `point` as crossover point.
Chromosomes to the right of the `point` are swapped
Args:
a: one-dimensional array, first parent
b: one-dimensional array, second parent
point: crossover point
Return:
Two np.ndarray objects -- the offspring"""
raise NotImplemetnedError()
def two_point_crossover(a: np.ndarray, b: np.ndarray, first: int, second: int) -> tuple[np.ndarray, np.ndarray]:
"""Performs two point crossover of `a` and `b` using `first` and `second` as crossover points.
Chromosomes between `first` and `second` are swapped
Args:
a: one-dimensional array, first parent
b: one-dimensional array, second parent
first: first crossover point
second: second crossover point
Return:
Two np.ndarray objects -- the offspring"""
raise NotImplemetnedError()
def k_point_crossover(a: np.ndarray, b: np.ndarray, points: np.ndarray) -> tuple[np.ndarray, np.ndarray]:
"""Performs k point crossover of `a` and `b` using `points` as crossover points.
Chromosomes between each even pair of points are swapped
Args:
a: one-dimensional array, first parent
b: one-dimensional array, second parent
points: one-dimensional array, crossover points
Return:
Two np.ndarray objects -- the offspring"""
raise NotImplemetnedError()
Код решения должен содержать импортируемые модули, определение и реализацию функций.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
b = np.array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
prep = lambda x: ' '.join(map(str, x))
print(*map(prep, single_point_crossover(a, b, 4)), '', sep='\n')
print(*map(prep, two_point_crossover(a, b, 2, 7)), '', sep='\n')
print(*map(prep, k_point_crossover(a, b, np.array([1, 5, 8]))), '', sep='\n')
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется на языке Python реализовать алгоритм Stochastic universal sampling.
Функция должна иметь следующий интерфейс
import numpy as np
def sus(fitness: np.ndarray, n: int, start: float) -> list:
"""Selects exactly `n` indices of `fitness` using Stochastic universal sampling alpgorithm.
Args:
fitness: one-dimensional array, fitness values of the population, sorted in descending order
n: number of individuals to keep
start: minimal cumulative fitness value
Return:
Indices of the new population"""
raise NotImplementedError()
Параметрами функции являются:
fitness
— одномерный массив значений функции приспособленности, отсортированный по убыванию,n
— количество особей, которых нужно оставить,start
— минимальное кумулятивное значение функции приспособленности.Функция возвращает список индексов выбранных особей
Код решения должен содержать импортируемые модули, определение и реализацию функции.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
fitness = np.array([10, 4, 3, 2, 1])
print(*fitness[sus(fitness, 3, 6)])
|
|
Входной файл: | input.txt | Ограничение времени: | 1 сек | |
Выходной файл: | output.txt | Ограничение памяти: | 256 Мб | |
Максимальный балл: | 10000 |
Группа разработчиков работает над проектом. Весь проект разбит на задачи, для каждой задачи указывается ее категория сложности (1, 2, 3 или 4), а также оценочное время выполнения задачи в часах. Проект считается выполненным, если выполнены все задачи. Для каждого разработчика и для каждой категории сложности задачи указывается коэффициент, с которым, как ожидается, будет соотноситься реальное время выполнения задачи данным разработчиком к оценочному времени. Считается, что все разработчики начинают работать с проектом в одно и тоже время и выделяют для работы одинаковое время. Необходимо реализовать программу, распределяющую задачи по разработчикам, с целью минимизировать время выполнения проекта (получить готовый проект за минимальный промежуток времени). Поиск решения необходимо реализовать с помощью генетического алгоритма.
В качестве решения принимается текстовый файл, содержащий ответ к задаче
в требуемом формате (при его отправке следует выбрать в тестирующей системе среду разработки "Answer text
").
Решение набирает количество баллов, вычисляемое по следующей формуле: Score = 106Tmax. Tmax — наибольшее среди всех разработчиков время, затраченное на выполнение выданных соответствующему разработчику задач.
Первая строка входного файла содержит целое число N количество задач.
Вторая строка — N целых чисел от 1 до 4 категорий сложности задач.
Третья строка — N вещественных положительных чисел оценочного времени для задач.
Четвертая строка – целое число M, количество разработчиков .
Следующие M строк содержат по 4 вещественных положительных числа — коэффициенты каждого разработчика.
Первая и единственная строка выходного файла содержит N целых чисел wi — номер разработчика, назначенного на i - ю задачу.
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
Максимальный балл: | 5 | Ограничение времени: | 1 сек | |
Ограничение памяти: | 512 Мб |
Требуется загрузить решение задачи Распределение задач. Баллы за задачу устанавливаются после ручной проверки отправленного решения.
В качестве решения принимается файл с исходным кодом, которым был получен ответ к задаче. В систему требуется отправить ссылку на файл, размещённый в открытом доступе (Google Colab, Github, Google Drive и др.), указав среду разработки "Answer text
". После отправки решение необходимо сдать преподавателю лично до начала зачётной недели.
Максимальное количество баллов за задачу — 5.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Пусть задана логистическая регрессия для задачи бинарной классификации
f: X↦ y, X ⊆ Rn, y = { − 1, 1}
f(x, θ) = σ(nx∑iθi)
σ(x) = 11 + e − x
Требуется реализовать следующие функции на языке Python.
import numpy as np
def logistic_func(theta: np.ndarray, x: np.ndarray) -> float:
"""Computes logistic regression value for sample x.
Arguments:
theta: 1d array of float, regression coefficients
x: 1d array of float, sample to compute value for
Returns:
float, logistic regression value
"""
pass
def logistic_func_all(theta: np.ndarray, X: np.ndarray) -> np.ndarray:
"""Computes logistic regression value for all samples in matrix X.
Arguments:
theta: 1d array of float, regression coefficients
X: 2d array of float, row-major matrix of samples
Returns:
1d array of float, logistic regression values for all samples in matrix X
"""
pass
def cross_entropy_loss(theta: np.ndarray, X: np.ndarray, y: np.ndarray) -> float:
"""Computes binary cross entropy loss for logistric regression with parameters `theta`
on samples `X` and true labels `y`.
Arguments:
theta: 1d array of float, regression coefficients
X: 2d array of float, row-major matrix of samples
y: 1d array of int, true class lables from set {-1, 1}
Returns:
float, cross entropy loss value
"""
pass
def grad_cross_entropy_loss(theta: np.ndarray, X: np.ndarray, y: np.ndarray) -> np.ndarray:
"""Computes gradient of binary cross entropy loss for logistic regression
with parameters `theta` on samples `X` and true values `y`.
Arguments:
theta: 1d array of float, regresion coefficients
X: 2d array of float, row-major matrix of samples
y: 1d array of int, true class labels from set {-1, 1}
Returns:
1d array of float, cross entorpy gradient with respect to `theta`
"""
pass
Код должен содержать только реализацию функций.
Входной файл: | Стандартный вход | Ограничение времени: | 2 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется написать на языке Python класс PoissonRegression
, реализующий обобщённую линейную модель, использующую логарифмическую функцию связи
f(x, θ) = exp(n∑i = 1θi xi + θ0) ,
где n — количество признаков.
Модель оптимизирует следующую функцию потерь
l(X, y, θ) = 1mm∑i = 1(yilogyif(Xi, θ) − yi + f(Xi, θ)) + α2n∑i = 1θ2i ,
где m — количество примеров, α — параметр регуляризации.
Для оценки качества модели используется метрика D2
D2 = 1 − D(y, ŷ)D(y, y) ,
где y — среднее значение вектора y,
D(y, ŷ) = 2mm∑i = 1(yilogyiŷi − yi + ŷi) .
Класс должен иметь следующий интерфейс
from __future__ import annotations
import numpy as np
class PoissonRegression:
r"""Implements a generalized linear model with log link function[1]
f(x, \theta) = \exp(\sum\limits_{i=1}^n\theta_ix_i + \theta_0)
The model optimizes the following loss
l(X, y, \theta) = \frac{1}{m}\sum\limits_{i=1}^n(y_i\log\frac{y_i}{f(X_i, \theta)} - y_i + f(X_i, \theta)) + \frac{\alpha}{2}\sum\limits_{i=1}^n\theta_i^2
where n, m are numbers of features and samples respectively, $\alpha$ -- regularization strength.
Parameters:
use_bias: bool, default = True
Whether the model uses bias term.
alpha: float, default = 1
L2 regularization strength.
References:
[1]: https://en.wikipedia.org/wiki/Generalized_linear_model#Link_function
"""
def __init__(self, use_bias: bool = True, alpha: float = 1):
"""Initializes `use_bias` and `alpha` fields."""
pass
def predict(self, X: np.ndarray) -> np.ndarray:
"""Computes model value on feature matrix `X`.
Arguments:
X: 2d array of float, feature matrix.
Returns:
1d array of float, predicted values.
"""
pass
def loss(self, X: np.ndarray, y: np.ndarray) -> float:
"""Computes loss value on feature matrix `X` with target values `y`.
Arguments:
X: 2d array of float, feature matrix.
y: 1d array of int, target values.
Returns:
loss value
"""
pass
def score(self, X: np.ndarray, y: np.ndarray) -> float:
r"""Computes D^2 score on feature matrix `X` with target values `y`.
The score is defined as
D^2 = 1 - \frac{D(y, \hat{y})}{D(y, \overline{y})}
where D(y, \hat{y}) = 2(y\log\frac{y}{\hat{y}} - y + \hat{y}).
Arguments:
X: 2d array of float, feature matrix.
y: 1d array of int, target values.
Returns:
score value
"""
pass
def fit(self, X: np.ndarray, y: np.ndarray, *,
eta: float = 1e-3, beta1: float = 0.9, beta2: float = 0.999,
epsilon: float = 1e-8, tol: float = 1e-3, max_iter: int = 1000) -> PoissonRegression:
"""Optimizes model loss w.r.t model coefficitents using Adam[1] optimization algorithm.
Initially model coefficients are initialized with zeros.
Arguments:
X: 2d array of float, feature matrix.
y: 1d array of int, target values.
eta: learning rate.
beta1: first moment decay rate.
beta2: second moment decay rate.
tol: threshold for L2-norm of gradient.
max_iter: maximal number of iterations.
Returns:
self
References:
[1]: https://ruder.io/optimizing-gradient-descent/index.html#adam
"""
pass
@property
def coeffs(self) -> np.ndarray:
"""Returns 1d array of float, coefficients used by the model excluding bias term."""
pass
@property
def bias(self) -> float:
"""Returns bias term used by the model. If `use_bias = False` returns 0."""
pass
Для оптимизации должен быть использован алгоритм Adam. Оптимизация начинается с нулевой начальной точки θ = {0}ni = 0.
При решении задачи запрещено использовать любые модули, кроме numpy
и scipy.special
.
Код решения должен содержать импортируемые модули, определение и реализацию класса.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 100 |
Пусть задан некоторый набор точек X = {xi}ni = 1, xi ∈ Rm. Требуется выполнить кластеризацию точек на k кластеров, используя наивный алгоритм KMeans.
Первая строка входных данных содержит натуральные числа n, m, k, t — количество точек, размерность пространства, количество кластеров и максимальное количество итераций соответственно. В каждой из следующих n строк содержится m вещественных чисел и одно натуральное число — координаты точки и начальное значение кластера точки. Значения кластеров нумеруются от 0 до k − 1.
Выходной данные должны содержать n натуральных чисел — номер кластера каждой точки.
6 ⩽ n ⩽ 1000
2 ⩽ m, k ⩽ 10
10 ⩽ t ⩽ 109
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 2 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
В городе Плотноскане проходит научная конференция. Студенты местного университета были приглашены на конференцию в последний момент так, что они даже не успели подготовиться и прочитать программу конференции. Конференция проходит в большом зале в m-мерном пространстве. Слушатели собираются около докладчиков, образуя группы. Все члены группы либо имеют f ∈ N соседей на расстоянии не более ε (включая себя), либо находятся на расстоянии не более ε ∈ R от такого члена группы. При этом некоторые участники конференции не слушают доклады, витая в своих мыслях, и, таким образом, не принадлежат никакой из групп. Зная позиции всех участников в зале, помогите студентам определить количество участников в каждой группе, чтобы они могли выбрать наиболее интересные из них. Также, во избежание неопределённости было решено начинать поиск групп рассматривая участников в том порядке, в котором они указаны в списке.
При решении задачи разрешено использовать только стандартные библиотеки Python и библиотеку numpy.
Первая строка входного файла содержит числа n, m, ε, f — количество участников конференции, размерность пространства, внутреннее расстояние в группе и минимальное количество соседей. В следующих n строках содержится m вещественных чисел — координаты участников в пространстве.
Выходной файл должен содержать натуральные числа — количество участников в каждой группе, отсортированные в порядке возрастания.
50 ⩽ n ⩽ 2750
2 ⩽ m ⩽ 50
0.5 ⩽ ε ⩽ 25
3 ⩽ f ⩽ 15
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 | input.txt |
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
В городе Ксреднееве проходит научная конференция. Студенты местного университета были приглашены в последний момент, и поэтому опоздали на начало конференции. Конференция проходит в большом зале в m-мерном пространстве. Слушатели собираются вокруг докладчиков, образуя группы так, что каждый докладчик находится в центре некоторого облака слушателей, при этом с начала конференции докладчики как-то изменили свою позицию. Зная позиции всех слушателей в зале, количество докладчиков и позиции докладчиков на начало конференции, помогите студентам определить текущие координаты докладчиков.
При решении задачи разрешено использовать только стандартные библиотеки Python и библиотеку numpy.
Первая строка входного файла содержит натуральные числа n, m, k — количество слушателей конференции, размерность пространства, количество докладчиков. В следующих n строках содержится по m вещественных чисел — координаты слушателей. Далее в k строках содержится по m вещественных чисел — координаты начальных позиций участников.
Выходной файл должен содержать k строк по m целых чисел — координаты докладчиков, округлённые к ближайшему целому (половина округляется к ближайшему чётному, round half to even) и отсортированные в порядке возрастания евклидовой нормы точек.
50 ⩽ n ⩽ 7500
2 ⩽ m, k ⩽ 20
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 | input.txt |
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать следующие функцию на языке Python.
def knn_predict_simple(X, y, x, k) # array of pairs -- class and number of votes of neighbors
X
— двумерный np.array
— обучающая выборка
y
— реальные значения классов в обучающей выборке
x
— одномерный np.array
-- тестовый пример
k
— количество соседей, которые нужно рассматривать
Функция возвращает массив пар (класс, количество голосов) только для классов которые встречаются среди k ближайших соседей!
Для поиска ближайшего примера использовать евклидово расстояние.
Код должен содержать только реализацию функции.
Входной файл: | Стандартный вход | Ограничение времени: | 10 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать функцию leave-one-out score на языке Python. Результат функции должен быть целочисленным, то есть его НЕ следует нормировать на размер выборки.
def loo_score(predict, X, y, k) # integer loo score for predict function
predict
— функция predict(X, y, x, k)
, обучающая некоторый алгоритм на выборке X, y
с параметром k
и дающая предсказание на примере x
X
— двумерный np.array
— обучающая выборка
y
— реальные значения классов в обучающей выборке
k
— количество соседей, которые нужно рассматривать
Код должен содержать только реализацию функции.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Пусть на некотором наборе точек X = {xi}ni = 1, xi ∈ Rm задана функция f: Rm↦N. Требуется написать программу, вычисляющую значение border ratio α(x) = ∥x̂ − y∥2∥ x − y∥2, ∀ x ∈ X, где y = arg miny ∈ X, f(x) ≠ f(y)∥ x − y∥2, x̂ = arg minx̂ ∈ X, f(x) = f(x̂)∥x̂ − y∥2.
Первая строка входного файла содержит натуральные числа n, m — количество точек и размерность пространства соответственно. В следующих n строках содержится m вещественных чисел и одно натуральное число — координаты точки и значение функции в этой точке.
Выходной файл должен содержать n вещественных чисел — значения border ratio каждой точки с точностью не менее трёх знаков после запятой.
6 ⩽ n ⩽ 1500
2 ⩽ m ⩽ 50
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
2 |
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Пусть задан некоторый язык, описываемый множеством слов W, |W| = m, m ∈ N. Требуется построить наивный байесовский классификатор f: B↦ C = {i}k − 1i = 0, где {0, 1}m ⊇ B = ⋃l ∈ N,μ ∈ Wl{δw(μ)|w ∈ W} — множество представлений всех возможных сообщений составленных на языке W в виде мешка слов, δw — мера Дирака, δx(A) = {1,x ∈ A,0,x ∉ A..
При этом процесс классификации происходит следующим образом
Первая строка входного файла содержит натуральные числа n, m, k — количество сообщений, мощность языка и количество классов соответственно. В каждой их следующих n строк содержится m чисел 0 или 1 и одно натуральное число ci — представление сообщения в виде мешка слов и значение его класса.
Выходной файл должен содержать n натуральных чисел — предсказанное значение класса каждого сообщения на момент его получения.
10 ⩽ n ⩽ 7500
8 ⩽ m ⩽ 100
2 ⩽ k ⩽ 10
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
Входной файл: | input.txt | Ограничение времени: | 2 сек | |
Выходной файл: | output.txt | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Пусть задано вещественное пространство Rn. Требуется написать программу, классифицирующую точки с использованием байесовского классификатора B(x) = arg maxi = 0,m − 1(πi fNk(μi, Σi)(x)m − 1∏j = 0,i ≠ jλi,j), где m — количество классов, πi — априорная вероятность класса, fNk(μi, Σi) — функция плотности многомерного нормального распределения Nk(μi, Σi) со средним μi и матрицей ковариации Σi, λi,j — штраф за ошибочною классификацию класса i в качестве класса j.
Первая строка входного файла содержит натуральные числа n, m, k, l — размерность пространства, количество классов, количество элементов обучающей и тестовой выборок соответственно. Далее следуют значения матрицы λ — m строк по m натуральных чисел. Далее следуют k строк обучающей выборки в формате xi,0, xi,1, …, xi,n − 1, ci, где xi,j вещественные числа — координаты точки i, ci ∈ {0,1,…,m − 1} — класс точки. Последние l строк содержат по n вещественных чисел — координаты точек тестовой выборки.
Выходной файл должен содержать l целых чисел — предсказанные классы точек тестовой выборки.
n ∈ {2, 3}
2 ⩽ m ⩽ 9
2 ⩽ k, l ⩽ 103
1 ⩽ λi,j ⩽ 5
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
Максимальный балл: | 10 |
Билет выбирается независимо и случайно из следующего списка:
Экзамен проводится очно. В случае невозможности очного присутствия необходимо заранее договориться с преподавателем о дистанционной сдаче.
После взятия билета студент готовится в ответу. При подготовке можно использовать произвольные материалы и доступ в Интернет.
В докладе необходимо максимально кратко упомянуть все важные элементы доставшейся темы/вопроса. После доклада преподаватель задаёт несколько уточняющих вопросов. Время на ответ 10 минут + 5 минут на вопросы.
Входной файл: | Стандартный вход | Ограничение времени: | 2 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
В городе Оптике проходит научная конференция. Студенты местного университета были приглашены на конференцию и уже провели несколько часов на ней, при этом сама конференция проходит в большом зале в m-мерном пространстве. Преподаватель, пришедший на конференцию вместе со студентами, решил для каждого участника выяснить минимальное расстояние, на котором он может быть достигнут из позиции другого участника. При этом, чтобы сделать задачу полее интересной, преподаватель решил использовать более интересный способ определения расстояния. Каждому из участников требуется не менее f ∈ N соседей на расстоянии не более ε ∈ R (включая себя), чтобы из его позиции можно было достичь других участников. При этом, расстояние до такого участника не может быть меньше, чем расстояние, на котором могут быть достигнуты ровно f участников. Зная позиции всех участников в зале, помогите преподавателю вычислить это расстояние. Во избежание неопределённости было решено рассматривать участников в том порядке, в котором они указаны в списке, при этом достижимых участников стоит рассмотреть в первую очередь, перед переходом к следующему в списке, и не рассматривать одного и того же участника более одного раза.
Первая строка входного файла содержит числа n, m, ε, f — количество участников конференции, размерность пространства, максимальное достижимое расстояние и минимальное количество соседей. В следующих n строках содержится m вещественных чисел — координаты участников в пространстве.
В первой строке выходного файла выведите n вещественных чисел с точностью не менее 3-x знаков после запятой — расстояние на котором достижим каждый из участников. Во второй строке выведите n целых чисел — индекс участника из которого достижим данный. Если участник не достижим, следует вывести − 1 в обоих случаях.
50 ⩽ n ⩽ 2500
2 ⩽ m ⩽ 50
0.5 ⩽ ε < ∞
3 ⩽ f ⩽ 15
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 | input.txt | output.txt |
2 | input.txt | output.txt |