Как сделать контест
gojira → A look at Competitive Programming post-hibernation
Rosei → Optimising a mongo search query
snarknews → Three Regionals Cup-2021
300iq → Invitation to Good Bye 2021: 2022 is NEAR
rsj → HELP (maximum independent set problem)
notsoawesome → Doubt in problem C-MP3
TooNewbie → [Tutorial] Recurrent Sequences — Application of combinatorics in DP (basics)
Ahmadsm2005 → From Newbie to Expert in 6 months
Niladri_19 → Print Subsequence
MoonKnight9031 → Difficulty in converting recursive solution to memoization / top-down DP
BERNARB.01 → Range Queries Problems
Monogon → Global Round 18 Editorial
kzhhooo → Is there anywhere we can find the test data of IZhO?
Anthony_Smith → What are the transitions in this Bitmask DP problem?
daCodda → Does anyone else experience this?
Блог пользователя elena
Добавление тренировки из Polygon'а
Автор elena, 8 лет назад ,
Вероятно, большая часть контестов, присутствующих на настоящий момент в “Тренировках”, подготовлена не с помощью Polygon’а. Тем не менее, возможно, несколько более подробная, нежели п.3 в краткой справке раздела “Тренировки”, инструкция “как создать тренировку из задач, подготовленных в Polygon” окажется для кого-то полезной. Использовать при этом Wizard нет особой необходимости.
Итак, предполагаем, что у нас есть задачи, подготовленные в Polygon, для каждой из которых успешно собран пакет и из которых создан контест.
Сначала проведем предварительную подготовку на Polygon.
Следует дать write-права на контест и на все задачи пользователю codeforces.
Быстрее всего действовать именно в таком порядке: добавить пользователя codeforces в список Contest developers, после чего выставить права в окне Manage access, не обращаясь к каждой задаче по отдельности.
Для всех задач должны быть собраны пакеты, содержащие последнюю редакцию задачи.
Нужно проверить, что все задачи имеют название (и другие составляющие, за исключением разве что Note): пакет может собраться, но Codeforces его не “примет”.
Перейдем на Codeforces.
В “Тренировках” должен быть включен тренерский режим.
Выбрать "Создать тренировку" и заполнить необходимые поля (название, длительность, сезон и т.п.). Если потребуется, всю эту информацию можно будет отредактировать — тренировка появится в списке, и её свойства будут доступны для изменений.
Приватный режим доступа (по умолчанию) стоит оставить, пока создание тренировки не будет завершено.
Положить в каталог sandbox тренировки файл contest.xml, заменив им находящийся там “стандартный” contest.xml. Это можно сделать по ftp (login и password для доступа совпадают с таковыми на Codeforces).
Мне в качестве клиента удобнее всего использовать Far manager. Режим passive mode, скорее всего, включать не потребуется. Но если что-то все же пойдет не так, можно попробовать включить.
Если тренировка проводится на задачах уже состоявшегося соревнования и имеется (преобразованный в нужный (testsys) формат) файл монитора соревнований contest.dat, то “стандартный” contest.dat из sandbox также нужно заменить этим файлом (также по ftp).
"Обновить соревнование" (перевести его из sandbox в release). Это займет некоторое время, после чего в соревновании появятся задачи. Если был добавлен файл монитора, то возле задач будет указано количество решивших их, а также будет доступен монитор с “участниками-призраками”.
Не забудьте нажать F5 или обновить страницу другим образом.
Если все предыдущие пункты выполнены успешно, можно изменить уровень доступа на публичный. Если у тренировки установлено время начала, она не будет доступна до этого момента (при необходимости можно будет ее обновить).
Если были внесены какие-либо изменения в задачи или контест на Polygon (например, выставлены другие ограничения по времени) или же менялся файл монитора contest.dat, необходимо будет вновь “Обновить соревнование”.
Если у тренировки установлено время начала, за 6 часов до этого момента автоматически будет открыта регистрация. Регистрироваться на тренировку участники могут вплоть до ее окончания.
PS. Что несколько огорчает — совершенно не используется Problem tutorial, поле, имеющееся у каждой задачи на Polygon. Кажется, было бы удобно собирать не только файл контеста (или задачи) в pdf, но и его (ее) разбор. Который можно было бы тоже “автоматически” включать в тренировку.
тренировки, howto, polygon
Ты придумал облачные вычисления.
Работает это так: сервер принимает запрос с текстом программы, запускает процесс компилятора и передает ему текст.
Загружаешь файл, компилируешь со своими параметрами (очень желательно обрезать возможность всего хоть немного потенциально опасного - файлы, системные функции, даже графика) и выполняешь под пользователем с минимальными правами. Вывод программы сравниваешь с ожидаемым, если есть расхождение - Wrong, если нет - Accepted. Что имено смущает?
void LinkSoketPort(); // функция соединения сокета с портом
void LinkKlient(); // функция ожидания соединения клиента
void SendData(char* buff); // посылка данных клиенту
int Chtenie(); // принятие данных
void main()
setlocale(LC_ALL, "Russian_Russia.1251");
StartWinSock();
SocketGetHostName();
CreateSocket();
LinkSoketPort();
WaitSocket();
LinkKlient();
char* buff="HTTP/1.0 401\r\nServer:Realtron WebServer 1.1\r\nWWW-Authenticate\r\n";
Chtenie();
SendData(buff);
CloseScoket();
StopWinSock();
>
void StartWinSock()
void StopWinSock()
void SocketGetHostName()
void CreateSocket()
void LinkSoketPort()
void CloseScoket()
void WaitSocket()
LinkKlient();
char* buff="HTTP/1.0 401\r\nServer:Realtron WebServer 1.1\r\nWWW-Authenticate\r\n";
Chtenie();
SendData(buff);
CloseScoket();
StopWinSock();
>
void StartWinSock()
void StopWinSock()
void SocketGetHostName()
void CreateSocket()
void LinkSoketPort()
void CloseScoket()
void WaitSocket()
void LinkKlient()
void SendData(char* buff)
int Errors;
Errors = send(s1,buff,lstrlenA(buff),0);
if (Errors == SOCKET_ERROR) printf(" Ошибка отправки данных . \n");
else printf(buff);
>
int Chtenie()
char*buf= "";
int len=50;
int n=recv(s1, buf, len,1);
if (n!=0)printf(buf);
return n;
>
Авторизованный учитель имеет возможность просматривать все посылки участников (исходные коды, протоколы и тесты). Им могут стать учителя и руководители кружков после аккредитации (инструкция чуть ниже). К сожалению, если вы ведете частную преподавательскую практику (например, как репетитор или готовите друзей и близких по какой-то теме), статус авторизованного учителя не будет выдан.
- Вашу ФИО, город, образовательную организацию
- Логин и привязанную к нему почту на информатиксе в рамках учетной записи (проверьте в личном кабинете, что эта почта действительно привязана)
- Ссылку на страницу образовательной организации, в которой вы работаете
- Ссылку на свой курс на информатикс (или тот, который проходите с учениками)
- Ссылку на группу школьников, проходящих ваш курс (url должен содержать подстроку group_id), в случае если у вас не ваш курс
В рамках этой роли мы просим не публиковать и не распространять тесты к задачам, не изменять статусы посылок не ваших учеников.
Просмотр списка посылок
В каких разрезах можно смотреть списки посылок:
- по данной задаче (список посылок всех пользователей, можно попасть с страницы с условием задачи, кнопка в правом верхнем углу "Посылки по задаче")
- по задачам данного контеста (список посылок всех пользователей по выбранному контесту, можно попасть с страницы с условия любой задачи из контеста, кнопка в правом верхнем углу "Все посылки")
- по задачам данного контеста с фильтром по вашей группе (список посылок всех пользователей, можно попасть с страницы с условием задачи, кнопка в правом верхнем углу "Все посылки" и далее в списке ниже выбрать фильтр по вашей группе, или, если используете механизм "Запись на курс" сделать фильтр по нему)
- все собственные посылки по всем задачам ("Мои посылки" на главной странице)
Редактирование задач
Создание групп
Для фильтрации результатов ваших учеников от остальных пользователей сайте есть 2 механизма:
- Вы создаете собственный курс и настраиваете запись/записываете учеников на курс (раздел "Участники", шестеренка в правом верхнем углу, "Настроить запись"). После этого в таблице результатов и всех посылках у вас есть фильтр "Все записавшиеся на курс". По его нажатию и произойдет отображение результатов только ваших учеников.
- Вы не создаете собственный курс, а проходите с учениками уже существующий. Вы можете объединить школьников в группы. У вас, как у создателя группы, и у всех включенных вами в группу участников на странице каждого контеста появятся новые ccылки в разделе "Список групп"
Группу может создать учитель/авторизованный учитель. В группу можно включать как школьников, так и других учителей (при этом изменять состав группы может только ее создатель или администраторы сайта).
Для того, чтобы создать группу:
- На главной странице в правом столбце выберите "Управление группами".
- На открывшейся странице выберите "Создать группу"
- Введите название группы (например, "Школа 125, 9А, 2020") и нажмите на кнопку создать.
- В правом окне размещен список всех пользователей сайта. Выберите нужных вам участников и перетащите их в левую часть. Для поиска нужных людей вы можете воcпользоваться сортировкой по любому столбцу (для этого нажмите на его заголовок) а также поиском в столбце (для этого наведите курсор на правый конец заголовка столбца, выберите появившуюся стрелочку, выберите в меню "Фильтр" и введите текст для поиска (например, фамилию ученика, номер школы или город).
- Найти нужного школьника и перетащите его в левую таблицу. Он сразу же будет добавлен в группу.
- Чтобы исключить школьника из группы, нужно перетащить его из левой таблички в правую.
Создание курса
Курс может создать учитель/авторизованный учитель. Курс может включать в себя несколько разделов, состоящих из материалов различного типа: контестов, теоретических материалов, тестов, заданий, ссылок на файлы и веб-страницы, таблиц результатов и т.д. Ссылки на все созданные курсы отображаются на главной странице в разделе " Кружки и уроки" .
Для создания нового курса заполните приведенную форму. Слева от каждого блока есть знак вопроса - при наведении на него курсора откроется текстовая подсказка с пояснением, что происходит :) В дальнейшем вы всегда сможете изменить любой из указанных параметров курса.
Добавление пользователей в курс
Для того, чтобы добавить пользователей в курс, перейдите на главную страницу курса, нажмите на шестерёнку и выберите "Больше". Во вкладке "Пользователи" перейдите в "Записанные на курс пользователи". Нажмите на кнопку "Записать пользователей на курс", найдите пользователя которого хотите добавить, выберите роль и нажмите "Запись пользователей на курс"
Добавление учебных материалов
Для начала редактирования курса нажмите кнопку Редактировать в правом верхнем углу на страничке курса.
Курс состоит из вводного раздела (без номера), в котором собрана информация и материалы, относящиеся ко всему курсу целиком, а также пронумерованных разделов (1, 2, 3, . ) каждый из которых может соответствовать по вашему желанию одному занятию, одному классу, одному мероприятию и т.п.
Для указания названия (или вступления) к разделу, нажмите на в левом верхнем углу соответствующего раздела. В этом поле вы можете написать любой текст в формате html, например:
или просто указать название раздела, например:
Условный оператор
Далее, в каждый раздел вы можете добавить различные учебные материалы, выбрав соответствующую строчку в выпадающем меню. Приведем краткие описания наиболее полезных видов материалов.
- Условия задач: контест, составленный из задач, имеющихся в тестирующей системе сайта. Школьникам будут доступны условия задач и возможность сдачи решений в тестирующую систему. Отметим, что эти материалы являются основным содержанием сайта, и мы надеемся, что вы будете создавать курсы с использованием задач с автоматическим тестированием.
- Таблица результатов: сводная таблица по нескольким контестам для данной группы.
- Пояснение: небольшой фрагмент текста на странице курса (в формате html)
- Текстовая страница: отдельный текстовый документ, который вы планируете написать, со ссылкой на него со страницы курса.
- Веб-страница: то же, но в формате html
- Ссылка на файл или веб-страницу: ссылка на существующую страницу в сети интернет или на страницу или файл на данном сайте. Вы также можете предварительно закачать файлы в свой курс и поставить ссылку на них.
Также вы можете создавать тесты, задания. опросы и т.п.
После создания любого материала справа от него появятся значки: перенести вправо (сделать отступ), перенести (в другое место курса), редактировать (сам материал и/или его настройки), удалить, спрятать (от школьников).
Контест - это набор задач на одну тему, либо предлназначенный для решения на одной олимпиаде, тренировке итп.
Для каждого контеста доступна своя таблица результатов, а также список посылок, сделанных школьниками по задачам данного контеста. Одна задача может входить в разные контесты, при ее решении результаты (в таблице результатов и списке посылок) появляются сразу во всех контестах, содержащих данную задачу.
Для создания контеста выберите в выпадающем меню Добавить ресурс в соответствующем разделе вашего курса пункт Условия задач. В поле название укажите заголовок контеста (например: Условный оператор или Тренировка №5). Если вы планируете провести олимпиаду и контрольную работу, вы можете отметить флажок Не показывать разборы, темы и т.д. - в этом случае школьникам не будут показываться различные подсказки.
Если вы пока не хотите открывать данный контест для школьников, выберите в пункте Доступные вариант Спрятать.
После этого вы сможете выбрать задачи для данного контеста. Для этого есть два основных способа:
Выбрать задачи из тематического рубрикатора. После перехода по данной ссылке вы попадете в тематический рубрикатор. Там присутствуют не все, но большая часть задач, имеющихся в тестирующей системе, и он постоянно пополняется. Под каждой задачей есть ссылка добавить, которая перемещает данную задачу в ваш контест. После выбора всех необходимых задач нужно нажать ссылку Создать контест в левом верхнем углу.
Добавить задачи по id (идентификационному номеру). Вы можете предварительно выбрать интересующие вас задачи в других разделах сайта и выписать себе их номера, а затем ввести их, перейдя по данной ссылке.
Продвинутым пользователям, знакомым со структурой контестов в ejudge данного сайта, доступна также возможность выбирать задачи непосредственно из контестов в тестирующей системе.
После выбора задач вы можете менять их порядок и удалять или скрывать те или иные задачи.
Задача - это основной объект на данном сайте. Данный сайт в первую создавался в первую очередь как база задач по программированию для школьников с автоматической проверкой. Чтобы успешно использовать его в своей деятельности, необходимо прежде всего понять, что такое задача и как она устроена.
Каждая задача включает в себя:
Список всех ваших посылок доступен в меню на главной странице сайта (ссылка Мои посылки).
Задачи на сайт добавляются при помощи системы Polygon. Более подробно о добавлении задач на сайт можно прочитать в этой инструкции.
Отдельным пользователям дополнительно предоставляются права Редактор сайта. Эти пользователи могут редактировать условия и разборы всех задач, а также указывать новые и редактировать старые темы, отнесенные к задаче.
Кроме того, каждый пользователь может предложить добавить к задаче ту или иную тему из тематического рубрикатора. Эти предложения вступают в силу после авторизации администратором.
Иногда бывает удобно объединить в одну таблицу результатов несколько контеcтов (например, все уроки данного класса или два тура одной олимпиады).
Создание таких таблиц результатов делается в два шага.
Создание набора контестов (монитора). На главной странице в разделе Рабочий стол учителя пройдите по ссылке Управление мониторами, далее: создать монитор и укажите название создаваемого монитора. Выберите контесты, которые необходимо в него включить и перетащите их мышью из правой таблицы в левую.
Создание таблицы результатов. Находясь в своем курсе, нажмите кнопку редактировать, в нужном разделе в выпадающем меню Добавить реcурс. выберите пункт Таблица результатов. Укажите ее название, выберите в пункте Таблица результатов созданный вами в п.1 монитор, а в пункте Группа - интересующую вас группу школьников либо пункт Все участники. Нажмите Сохранить.
В мониторе указываются только те участники, которые сделали в указанных контестах хотя бы одну посылку, и только те контестых, в которых указанные участники сделали хотя бы одну посылку.
Чтобы сделать монитор по секретной ссылке, можно сделать следующее:
Параметры: contest_id=1&contest_id=2&contest_id=3 . -- нужные id контестов aka модулей курсов group_id=4 -- группа, по которой делается монитор, если не указывать, будет по всем пользователям time_before=1521742439 -- время в timestamp, до которого собирать посылки time_after=1521742439 -- время в timestamp, после которого собирать посылки
Можно сделать это например с помощью js в консоли браузера на сайте информатикса:
Из запроса вернётся JSON с токеном для доступа к монитору
Чтобы сгенерировать ссылку, нужно быть авторизованным учителем; чтобы увидеть монитор, нужно быть залогиненым
После автоматического тестирования каждое решение получает статус проверки: OK, неполное решение, превышен лимит времени, превышен лимит памяти, и т.д.
Авторизованные учителя могут вручную изменять статус проверки. Обычно вручную устанавливаются следующие статусы:
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
Мне нравятся интересные задачи и я люблю участвовать в конкурсах, поэтому в данном репозитории собрана моя коллекция задач которые я решила и которые решу в будущем. Направление: frontend (javascript) Постаралась сохранить исходное форматирование, чтобы ничего не упустить и разделила по разным статусам:
-
– задача решена, все тесты Яндекс.Контеста пройдены – пройдена только часть тестов Яндекс.Контеста – задача решена и успешно работает с примерами из условия задачи, но тесты Яндекс.Контеста недоступны для прогона – задача не решена совсем
Статус можно увидеть рядом с названием задачи. Каждой решенной задаче соответствует файл, который указан после статуса в содержании или под заголовком "Решение" после условия задачи.
Содержание
Дан список, в которой хранятся исследователи и топонимы (имена мест) где они бывали. Список имеет следующий формат:
Надо развернуть этот список, таким образом, чтобы на первом месте оказался топоним, а на остальных исследователи.
Решение необходимо предоставить в виде CommonJS-модуль:
Вердикт RE также означает, что отправленное решение неверно.
Файл: A_reserachers.js
Комментарии:
Уверена, что эта задача должна решаться с помощью хэш списков, но, пока я не изучила алгоритмы и структуры данных, будет решение через массивы:
Вы попросили коллег раскрасить страны на нескольких географических картах. Но оказалось, что ваши коллеги иногда ошибаются и забывают покрасить какую-нибудь страну. Необходимо написать функцию, которая найдет все неокрашенные страны. Функция принимает на вход: - название начальной страны и ее цвет (например, code: ’RU’, color: ’red’); - функцию получения соседей (принимает на вход название страны и возвращает массив соседей с их цветами).
Функция должна вернуть промис, который разрешится массивом неокрашенных стран (typeof country.color === ’undefined’).
Нельзя вызывать функцию получения соседей параллельно. Нельзя использовать async/await и генераторы.
Интерфейс функции поиска соседей:
Решение необходимо предоставить в виде CommonJS-модуль:
Вердикт RE также означает, что отправленное решение неверно.
Начальная точка A (code: ’A’, color: ’red’).
getNeighbors(’A’) вернет:
getNeighbors(’E’) вернет:
и т.д. Решение должно вернуть массив с непокрашенными странами (порядок элементов в массиве не важен) [’D’]
На старой заброшенной базе геодезистов вы нашли код, который возвращает секретные послания, зашифрованные среди географических данных. Скрипт содержит несколько синтаксических ошибок и кажется работает очень медленно. Ваша задача - привести его в порядок.
В модуле task.js описан метод, который принимает на вход три аргумента - data1, data2 и maxLength. В переменной data1 и data2 передаются массивы объектов вида:
Решение необходимо предоставить в виде исправленого модуля task.js. Вердикт RE также означает, что отправленное решение неверно.
Дизайнер обновил логотип Конструктора карт (масштаб x5):
Его потребуется использовать в самых разных условиях. Чтобы это было максимально удобно, сверстайте его с помощью одного HTML-элемента на чистом CSS. Использовать картинки (даже через data:uri) нельзя.
Читайте также: