В школьных командах постоянно возникают проблемы, связанные с организацией работы в команде и общей стратегией. Часто контест проходит "как получится", решения принимаются неосознанно и т.д. Конечно, если это восьмиклассники, это не сильно удивительно, но обучать их всё-таки надо.
Андрей Акиньшин и я решили составить заготовку плана, по которому школьники должны продумать и описать работу в своей команде. Я предлагаю вместе обсудить, дополнить и откорректировать эту заготовку, чтобы она превратилась в нечто разумное. Пока это всего лишь некий сборник правил и советов.
Обращаю особое внимание на то, что в основном план предназначен для не очень опытных команд, составленных из школьников, поэтому, пожалуйста, вспомните то счастливое время, когда будете комментить:)
Андрей Акиньшин и я решили составить заготовку плана, по которому школьники должны продумать и описать работу в своей команде. Я предлагаю вместе обсудить, дополнить и откорректировать эту заготовку, чтобы она превратилась в нечто разумное. Пока это всего лишь некий сборник правил и советов.
Обращаю особое внимание на то, что в основном план предназначен для не очень опытных команд, составленных из школьников, поэтому, пожалуйста, вспомните то счастливое время, когда будете комментить:)
План описания работы команды:
- Стратегия
- Части контеста
- Старт контеста
Подумать:- Кто пишет заготовку?
- Кто читает задачи?
- Кто пишет первую задачу?
- Начало контеста должно быть максимально быстрым
- Желательно подготовить TaskList
- Следить за монитором: какая задача будет сдана первой
- Середина контеста
Учесть:- По-хорошему решённые задачи должны опережать кодера. Недопустима ситуация, когда кодер закончил всё кодить, а новых задач для него нету.
- Обновляем TaskList. Должна быть составлена более или менее чёткая стратегия на остаток олимпиады.
- Продолжаем следить за монитором. Пытаемся корректировать работу в соответсвии с наиболее популярными задачами.
- Конец контеста
Подумать:- За сколько времени до конца бросаем все силы на единственную задачу
- Нельзя в самом конце распыляться на несколько задач.
- Старт контеста
- Распределение ролей
Для каждой роли расписать всех трёх участников по приоритетам- Капитан
- Кодер
- Алгоритмист
- Математик
- Тестер
- Наблюдатель за кодером
- Распределение специализаций - выделить для каждого вида алгоритмов, кто из участников лучше всех может написать программу
Специализации:- Теория графов
- Алгоритмы на строках
- Геометрия
- Математика
- Динамика
- Теория игр
- Комбинаторика
- Структуры данных
- Длинная арифметика
- Порядок тестирования - определить основные виды тестов, составить таблицу - в какой ситуации какие тесты нужно использовать
Группы тестов:- Минимальные тесты
- Вырожденные случаи
- Максимальные тесты (в крайнем случае для них пишется генерилка)
- Граничные
- Рандомные
- Тесты, проверяющие конкретные случаи в задаче
- Граф из нуля вершин
- Граф из одной вершины
- Граф из двух вершин
- Полный граф
- Пустой граф
- Полный граф без одного ребра
- Граф с одним ребром
- Граф, в котором все вершины выстроены в цепочку
- Граф, в котором вершины замкнуты в кольцо
- Рандомный граф
- Граф, состоящий из нескольких компонент связности
- Неквадратный двумерный массив (n <> m)
- Массив, состоящий из одинаковых элементов
- Массив, состоящий из разных элементов
- Действия в типовых ситуациях - подробное описание действий каждого из участников, последовательность действий.
- Придумывать больше нечего, а компьютер занят.
- Продумать основную логику следующих для решения задач на бумажке
- Составить тесты
- Ещё пописать тесты
- Отосланное решение упало на первом тесте. Что надо делать?
- Проверить, что при отправке задача была выбрана правильно
- Проверить, что входные и выходные файлы в решении названы правильно
- Внимательно проверить формат вывода - возможно, где-то не хватает пробела или перевода строки
- Получили Wrong Answer. Что надо делать?
- Быстро просмотреть код
- Прогнать программу на тупых тестах
- Если с ходу не понятно в чём ошибка - распечатать решение, отдать компьютер под другую задачу
- Получили Time Limit. Что надо проверить?
- Не зависают ли циклы
- Недостаточно оптимизированный алгоритм
- Неверный алгоритм, нужно более оптимальное решение
- Получили Presentation Error. Что надо проверить?
- Формат вывода
- Получили Runtime Error. Что надо проверить?
- Выход за границы массива
- Деление на ноль
- Корень из отрицательного числа
- Тригонометрические функции, взятые от некорректных значений
- Бесконечная рекурсия
- Кривое чтение
- Получили Output Limit. Что надо проверить?
- Получили Memory Limit. Что надо проверить?
- Проверить выделение памяти под массивы
- Проверить рекурсию
- Никак не можем найти ошибку. Что надо проверить?
- Проверить типы данных
- Зануление переменных
- Правильность индексов при обращении к массивам
- Обратить внимание на Warning'и
- Проверить чтение и вывод данных
- Границы массивов и соблюдение этих границ в программе
- Прочитать условие задачи ещё раз. Возможно, это имеет смысл сделать человку, не участвовавшему в решении
- Рассказать ключевые моменты решения остальным членам команды
- Придумывать больше нечего, а компьютер занят.
- Части контеста
- Описание существующих проблем
- Проблемы, связанные со знанием алгоритмов
- Проблемы, связанные со стратегией
- Стандарт стиля кода
- Отступы
- Cтандартные названия для процедур и функций
- Cтандартные названия для переменных
- Названия для массивов в зависимости от назначения
- Названия для переменных некоторого конкретного назначения
- Стиль для объединения в названии нескольких слов
- Употребление подчёркиваний
- Употребление заглавных букв
- stackSize
- stack_size
- StackSize
- stacksize
- STACKSIZE
- stackSIZE
- stsz
- sizeofmygoodstack
- Cтандартные кодерские фичи
- Расписание тренировок
- Расписание тренировок на неделю
- Тематические тренировки
- Наборы задач для тренировок