How to improve the system for identifying AI cheaters on Codeforces?
Difference between en1 and ru1, changed 3790 character(s)
Hello dear users and [user:MikeMirzayanov,2025-03-18]!↵

Lately I've often come across discussions about the use of AI in competitions. I decided to share my thoughts and personal experience on this issue, as well as make some suggestions that could help to fight the problem of foul play more effectively.↵

As an experiment, I tested several ChatGPT models on a paid basis to see how well they are able to efficiently solve contests on different algorithms in terms of correct solutions and optimization.↵

- **o3-mini** copes well with div2 A-C level problems, but starting from div2 D the model without an explicitly defined solution idea often generates suboptimal code, incorrectly defining the optimal asymptotics of the algorithm. Problems are especially noticeable in dynamic programming problems when composing the recurrence formula and in interactive problems.↵
- **o3-mini-high** shows better understanding of the problems, deeper reasoning, but also makes mistakes on complex div2 E-F problems, especially those related to dynamic programming. Often, to get the correct and optimal solution, we have to manually describe the model algorithm with the exact formula and asymptotics.↵

In my experience, of course, for purely experimental and scientific purposes, I noticed one interesting thing — ChatGPT in standard conditions without detailed explanations of the algorithm usually generates the same code pattern, containing approximately _the same structure of functions and their names, similar style of variables and repeated comments, frequent use of the same blanks and templates, especially for typical algorithms_. Yes, of course an ordinary user can write a similar algorithm, but there will be a clear difference from AI in code layout and code structure.↵

This, in my opinion, can be used as one of the layers of protection for automatic moderation of solutions on the platform. Already now, moderation on Codeforces sometimes successfully detects suspiciously similar solutions on this very basis. But it is actually _very easy to circumvent this now by obfuscating the code, adding “garbage” and unnecessary functions, because of which the code will be difficult to read in the end_. You can think of several more layers of protection that will work in parallel with the main one.↵

The basic idea is behavioral analysis of user actions in real-time. The following functionality can be implemented:↵

1. Real-time analysis of the difference between the moment of opening the task condition and the first sending of the solution↵
2. Tracking sudden changes in the speed of problem solving, for example, solving a complex problem too quickly after a long idle time without activity.↵
3. Fixing absolutely all user actions on the page of the contest with batch sending of encrypted data to the server for the anti-fraud module, without which further action on the site will be impossible, we will take into account especially carefully the events of copying the task condition from the page.↵

A separate and key solution will be the implementation of a client application **Client <-> Server**. Its main task will be monitoring of suspicious actions. In some ways its logic will be similar to the work of a proctor when conducting, for example, an online screener.↵

1. Analyzing processes running during the contest↵
2. Analyzing incoming/outgoing traffic to control requests to AI services↵
3. Creating and sending random screenshots of the user's screen to the server only when there is suspicious activity↵

Of course, from a privacy point of view, this solution would not be a good one, so it's worth thinking more about how to implement it properly.↵

Write your thoughts and ideas in comments, it will be interesting to hear
Привет всем участникам Codeforces и [user:MikeMirzayanov,2025-03-18]!↵

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

В качестве эксперимента я протестировал несколько моделей ChatGPT на платной основе, чтобы понять, насколько они способны эффективно решать контестные задачи на различные алгоритмы с точки зрения правильности решений и оптимизации.↵

- **o3-mini** отлично справляется с задачами уровня div2 A–C, но, начиная с div2 D модель без явно заданной идеи решения зачастую генерирует неоптимальный код, неверно определяя оптимальную асимптотику алгоритма. Особенно заметны проблемы в задачах на динамическое программирование при составлении рекуррентной формулы и в интерактивных задачах.↵
- **o3-mini-high** показывает лучшее понимание задач, глубже рассуждает, но тоже допускает ошибки на сложных задачах div2 E–F, особенно связанных с динамическим программированием. Зачастую для получения правильного и оптимального решения приходится вручную описывать модельный алгоритм с указанием точной формулы и асимптотики.↵

На своём опыте, разумеется, в исключительно экспериментальном и научных целях заметил одну интересную вещь &mdash; ChatGPT в стандартных условиях без подробных объяснений алгоритма обычно генерирует однотипный паттерн кода, содержащий примерно одинаковую структуру функций и их названия, схожий стиль переменных и повторяющиеся комментарии, частое использование одних и тех же заготовок и шаблонов, особенно для типовых алгоритмов. Да, безусловно обычный пользователь может написать подобный алгоритм, но будет явное отличие от ИИ в оформлении кода и структуре кода.↵

Именно это, на мой взгляд, можно использовать как один из уровней защиты для автоматической модерации решений на платформе. Уже сейчас модерация на Codeforces иногда успешно обнаруживает подозрительно похожие решения именно по такому признаку. Но это на самом деле контрится сейчас очень легко _путём обфускации кода, добавления "мусорных" и не нужных функций, из-за чего в конечном итоге код будет сложно прочесть_. На этот счёт можно продумать ещё несколько уровней защиты, которые будут работать параллельно с основным.↵

Основная идея заключается в поведенческом анализе действий пользователя в реалтайме. Можно внедрить следующий функционал:↵

1. Анализ в реальном времени разницы между моментом открытия условия задачи и первой отправкой решения↵
2. Отслеживание резких изменений в скорости решения задач, например, слишком быстрое решение сложной задачи после долгого простоя без активности↵
3. Фиксация абсолютно всех действий пользователя на странице контеста с пакетной отправкой зашифрованных данных на сервер для модуля антифрода, без которого дальнейшее действие на сайте будет невозможно, будем учитывать особо внимательно события копирования условия задачи со страницы↵

Отдельным и ключевым решением будет реализация клиентского приложения **Client <-> Server**. Основной его задачей будет мониторинг подозрительных действий. Чем-то его логика будет схожа с работой проктора при проведении, например, онлайн-экрамена.↵

1. Анализ процессов, запущенных во время контеста↵
2. Анализ входящего/исходящего траффика для контроля запросов к ИИ-сервисам↵
3. Создание и отправка на сервер случайных скриншотов экрана пользователя только при подозрительной активности↵

Конечно, с точки зрения конфиденциальности, такое решение будет не очень верным, поэтому стоит ещё подумать, как правильно его можно реализовать.↵

Пишите в комментариях ваши мысле и идеи, будет интересно послушать
!

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
ru7 Russian Sunb1m 2025-03-18 21:10:44 5 Мелкая правка: 'формлении кода и структу' -> 'формлении и структу'
ru6 Russian Sunb1m 2025-03-18 21:08:36 59
ru5 Russian Sunb1m 2025-03-18 21:05:58 4
ru4 Russian Sunb1m 2025-03-18 21:04:50 4 Мелкая правка: 'риментальном и научных' -> 'риментальных и научных'
ru3 Russian Sunb1m 2025-03-18 21:04:05 18 Мелкая правка: 'ой нечестной игры более эфф' -> 'ой нечестных соревнований более эфф'
ru2 Russian Sunb1m 2025-03-18 21:02:24 84
ru1 Russian Sunb1m 2025-03-18 21:01:59 3790 Первая редакция перевода на Русский
en1 English Sunb1m 2025-03-18 20:45:49 3842 Initial revision (published)