img

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

На данный момент идея такая: у каждой задачи будет какая-то начальная сложность. Каждая посылка (на задачу) будет влиять на ее сложность. Если Accepted, то отнимаем от сложности задачи коэффициент OK_PENALITY, а если Wrong Answer, Time Limit, Memory Limit и т.д; то добавляем к сложности задачи FAIL_PENALITY.

Пока мы взяли:

  • DEFAULT_PROBLEM_DIFFICULTY = 2.5
  • OK_PENALITY = 0.01
  • FAIL_PENALITY = 0.003

А рейтинг кодера, конечно же, будет высчитываться в зависимости от решенных им задач, то есть сумма сложностей решенных задач. Правда на этот раз добавим еще и штрафные отчисления за неудачные отправки. Определим коэффициент USER_FAIL_PENALITY говорящий нам сколько надо отнять от рейтинга пользователя за одну неудачную посылку.

мы взяли:

  • USER_FAIL_PENALITY = 0.003

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

Посылки отправляемые пользователями после того, как они получили Accepted не рассматриваются.

Ну как-то так.

Если есть идеи или предложения - пишите в комментариях.