Точность ближайшего соседа по секциям теплицы
Условие
В теплице собираются показания датчиков: температура воздуха, влажность и концентрация углекислого газа. По этим показаниям агроном отмечает состояние растений: 0 означает нормальное состояние, 1 означает стресс.
Первые записи относятся к калибровочной части журнала, для которой состояние растений уже известно. Следующие записи относятся к контрольной части. Для каждой контрольной записи состояние предсказывается методом одного ближайшего соседа, или 1NN.
Расстояние между двумя записями равно квадрату евклидова расстояния по трём показаниям датчиков:
d = (t1 - t2)^2 + (h1 - h2)^2 + (c1 - c2)^2.
Значение NA означает отсутствующее показание датчика. Перед вычислением расстояний каждое NA заменяется: температура на 20, влажность на 60, концентрация CO2 на 800.
В конце входа задан запрос из нескольких номеров секций. Требуется найти точность предсказаний только на контрольных записях из запрошенных секций. Точность равна 100 * C / K, где C — число верно предсказанных контрольных записей из запрошенных секций, а K — их общее число.
Если одинаковое наименьшее расстояние получается до нескольких калибровочных записей, выбирается запись, встретившаяся раньше во входных данных.
Формат ввода
В первой строке заданы два целых числа n и m — число калибровочных и контрольных записей.
Следующие n строк содержат калибровочные записи, затем следующие m строк содержат контрольные записи. Каждая запись имеет вид:
section temperature humidity co2 state
Здесь section — номер секции, temperature, humidity, co2 — показания датчиков или строка NA, state — известное состояние растений.
В следующей строке задано целое число q — число секций в запросе. В последней строке записаны q различных номеров секций.
Формат вывода
Выведите точность на контрольных записях из секций запроса в процентах с тремя знаками после точки.
Ограничения
1 <= n, m, n + m <= 4000.
1 <= section <= 8.
0 <= temperature <= 50, если значение не равно NA.
0 <= humidity <= 100, если значение не равно NA.
300 <= co2 <= 3000, если значение не равно NA.
state равно 0 или 1.
1 <= q <= 8.
Каждый номер секции в запросе различен и находится в диапазоне от 1 до 8.
Среди контрольных записей есть хотя бы одна запись, номер секции которой указан в запросе. Поэтому K > 0 и деления на ноль не возникает.
Решить задачу с автопроверкой на Python →
Куда дальше
- Python на олимпиадах — где языка хватает с запасом, а где начинают значить лимиты — с замерами
- Родителям: подготовка бесплатно — сколько стоит репетитор, что даёт бесплатный маршрут и как понять, что ребёнок занимается
- Школьный этап ВсОШ по информатике — как устроен первый этап и план подготовки за четыре недели