Чтобы проникнуться динамическим программированием, один из друзей порекомендовал сайт CodeForces. Там можно зарегистрироваться с сыном и выполнять различные задачи из архива. Ну и проверять решение тоже можно. Поддерживается куча языков, даже Kotlin! Хорошая возможность прокачать навыки ещё и в нём.Я не удержался и сходу решил несколько самых лёгких задач, чтобы опробовать возможности системы:

Судя по всему мне придётся привыкать, что всякие проверки - от лукавого. Для олимпиадного програмирования не нужно проверять входные данные, что позволяет писать код короче:
fun main() {
val index = readLine()!!.split(' ').map { it.toInt() }[1] - 1
val list = readLine()!!.split(' ').map { it.toInt() }
val min = list[index].coerceAtLeast(1)
println(list.filter { it >= min }.count())
}
Это пример решения задачи Следующий раунд. Как можно заметить, я игнорирую нулевой результат readLine(), а из первого массива беру только второе число, так как первое понадобилось бы только для проверки длины второго массива. Не уверен, нужно ли задавать нижнее значение min как 1, но решение приняли:
Круто!
ОтветитьУдалитьПослезавтра будет двухчасовой контест (в 17:35 начало, регистрация до 17:30).
Миша может получить опыт ;)
Устраивать контесты в рабочие дни - то ещё решение. Ему ещё уроки на субботу делать. И репитиция оркестра в 6 вечера...
УдалитьНу, там контесты не привязаны к дням недели. Вот, например, во dторник будет контест div3 (самый простой уровень), а в субботу, 19, тоже будет контест (div2 - тоже несложный, возможно, я поучаствую).
Удалитьhttps://codeforces.com/calendar
Спасибо. Попробуем
УдалитьKotlin - это нечто! Решение этой задачи в одну строку:
ОтветитьУдалитьfun main() = println(readLine()!!
.split(' ')
.map { it.toInt() }
.reduce { x, y -> x * y / 2 })
Как профессионального программиста меня убивает такой код, но тут прокатывает...