210 likes | 404 Views
Соревнования по программированию. Лекция 1. Добро пожаловать. Введение Соревнования по программированию Как практиковаться Примеры решения задач Оценки. Тренеры. Официально : Беляев Артем Так же : Мансуров Артур Федотов Сергей Гуринов Андрей Мохов Андрей Алексеев Арсений.
E N D
Соревнования по программированию Лекция 1
Добро пожаловать • Введение • Соревнования по программированию • Как практиковаться • Примеры решения задач • Оценки
Тренеры • Официально: Беляев Артем • Так же: • Мансуров Артур • Федотов Сергей • Гуринов Андрей • Мохов Андрей • Алексеев Арсений
Зачем нужны соревнования? • Можно выучить… • Много полезных алгоритмов, математические идеи • Как быстро и аккуратно запрограммировать и отладить • Как работать в команде • А потом можно тренироваться, практиковаться в собеседованиях • В конце концов - это прикольно!
Требования к участникам • Начальные навыки в программировании • Должны программировать на c++, java • Хорошие знания математики • И самое важное - желания обучаться
Темы лекций и занятий • Введение • Математика в программировании • Структуры данных • Динамическое программирование • Комбинаторика • Алгоритмы на графах • Задачи поиска кратчайших путей • Сетевые потоки • Геометрические алгоритмы • Алгоритмы на строках
Соревнования по программированию • Соревнования КРСУ • ACM-ICPC • NEERC Regionals • Мировой финал • Online Соревнования • TopCoder, Codeforces • Google Code Jam • И много много других…
Как тренироваться • USACO Training Program • Online Judges • Еженедельные тренировочные соревнования
USACO Training Program • http://ace.delos.com/usacogate • Детальное описание базовых алгоритмов и пути решение задач • Хорошие задачи • Автоматизирования система тестирования
Online Judges • Веб сайты • Сайты, где проходят реальные соревнования • И там где можно получить быстрый ответ • Несколько хороших сайтов: • Peking OJ • CodeforcesOJ • TimusOJ • UVa OJ
Еженедельный практический контест • Уточним удобное время (скорее всего пятница с 12.00- до упора) • Возможны бонусы! • Можно задавать вопросы • Реальные задачи с разных соревнований • Надо придумать общую рассылку и группу например на facebook
Решение задач • Прочитать задание, выделить область • Проверить ввод/вывод! • Выделить сущность задачи • Разработать алгоритм • Часто самый сложный • Реализовать и отладить • Отослать • AC! • Если нет, то вернуться к шагу 4
Пример решения задачи • POJ 1000: Задача A+B • Вход: Два целых числа 𝑎, 𝑏 разделенных пробелами • Ограничения: 0 ≤ 𝑎, 𝑏 ≤ 10 • На выходе: 𝑎 + 𝑏
POJ 1000 Решение на C/C++ #include<stdio.h> int main() { inta, b; scanf("%d%d", &a, &b); printf("%d\n", a + b); return 0; }
Другой пример • POJ 1004: Финансовый менеджмент • Вход: 12 вещественных чисел по одному на строке • Выход: Среднее данных чисел • Чуть сложнее чем POJ 1000…
POJ 1004 Решение на C/C++ #include<stdio.h> intmain() { double sum = 0, buf; for(inti = 0; i < 12; i++) { scanf("%lf", &buf); sum += buf; } printf("$%.2lf\n", sum / 12.0); return 0; }
Есть над чем поразмыслить… • Что если числа очень большие? • Не все ограничения очевидны • Скрытые ограничения почти всегда “разумны” • Всегда нужно думать о худших случаях, крайних случаях, и т.д.
Оценки • Вы можете • Решить все задания по курсу на POJ и показать результат • Или, УСПЕШНО участвовать более чем в 4 еженедельных контекстах • Если есть опыт, то лучше сразу участвовать и в соревнованиях и решать задачи • Это всегда лучше
Stanford ACM Team Notebook • http://stanford.edu/~liszt90/acm/notebook.html • Реализацию множества алгоритмов можно выучить • Политика использования готовых алгоритмов: • Не КОПИРОВАТЬ! • Как минимум самому все перенабрать! • Если есть ошибки или улучшения, можете спрашивать
Ссылки • Материал курса: • http://cs97si.stanford.edu • http://olymp.krsu.edu.kg • Stanford ACM Team Notebook: • http://stanford.edu/~liszt90/acm/notebook.html • Peking Online Judge: http://poj.org • USACO Training Gate: • http://ace.delos.com/usacogate • Online discussion board (ACM ICPC Kyrgyzstan): • https://www.facebook.com/groups/219510421522554/
Блок заданий 1 • Блок заданий1: Упражнения по программированию • 1000 A+B Problem (0) • 1004 Financial Management (0) • 1003 Hangover (1) • 1007 DNA Sorting (2) • 2136 Vertical Histogram (2) • 2140 Herd Sums (3) • 1504 Adding Reversed Numbers (3) • 1806 Manhattan 2025 (4) • 1001 Exponentiation (5) • 1922 Ride to School (5) • 3251 Big Square (6, challenge problem) • 1403 Hotline (9, challenge problem)