blackav / ejudge

Ejudge programming contest management system
https://ejudge.ru
GNU General Public License v2.0
184 stars 43 forks source link

На странице "Standings" ошибочно применяется штраф за посылки со статусом "OK" #145

Closed vvd170501 closed 1 year ago

vvd170501 commented 1 year ago

Описание проблемы

Если в контесте используетсяя система KIROV, без опций ignore_unmarked и score_latest_or_unmarked, то на странице "Standings" предыдущие посылки со статусом "OK" ошибочно учитываются при вычислении штрафа. В частности, из-за этого некорректно считается балл для посылок с положительным score_adj, если у пользователя были предыдущие правильные посылки в этой задаче.

Пример списка посылок: image

Так отображается балл в "Standings" в интерфейсе администратора: Screenshot from 2023-02-19 16-29-03

(в таблице 108 баллов, хотя должно быть 110)

В интерфейсе пользователя также отображается некорректный балл, т.к. для обеих таблиц используется один и тот же код.

Причина

Проблема заключается в том, что для вычисления штрафа используется att_num - суммарное число посылок пользователя в конкретной задаче, а не количество частичных решений.

Возможный вариант исправления

vvd170501/ejudge@36bfcf8d8 + vvd170501/ejudge@40cf178e8. Исправлен подсчёт только для контестов без опций score_latest_or_unmarked и ignore_unmarked.

Возможно, этот коммит ломает подсчёт баллов для контестов с ignore_unmarked (должны ли непомеченные посылки со статусом OK учитываться в штрафе?).

Отображение баллов в Standings в контестах с score_latest_or_unmarked не проверял, но, скорее всего, для них эта проблема тоже актуальна.

blackav commented 1 year ago

кажется, наоборот, нужно все предыдущие попытки, кроме rejected и ignored штрафовать

vvd170501 commented 1 year ago

Почему? Если пользователь сдал решение, получил ОК, а потом решил переотправить его (например, с добавленным комментарием), то как-то странно за это штрафовать.