Школьник об олимпиадном программировании


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

Об обучении


Учусь я в школе с углубленным изучением физики, математики и информатики.
Что же это за школа, как в ней учиться и как в нее поступить?
Отбор проходит в два этапа. Первый — экзамен по физике и математике. После него некоторые счастливчики попадают на собеседование, где от них требуется решить несколько олимпиадных задач по математике. И только после этого самые умные и удачливые становятся учениками.
Учиться очень тяжело и сложно. Учителя требуют идеального знания чуть ли не всех предметов. На родительском собрании сказали: «В начале обучения абсолютно все ученики скатываются до двоек, даже отличники. Те, кто начинают реально учиться — получают хорошие оценки. Остальные отсеиваются». У меня больше всего было проблем с русским языком и литературой, как бы это ни было странно.


Меня всегда привлекало программирование (что это такое я понял аж в 4 классе). Я был очень рад, когда в седьмом классе начали преподавать Pascal и различные вычислительные алгоритмы. Именно тогда я написал первый «Hello World!», алгоритм Евклида; изучил условные операторы, циклы, массивы.
С восьмого класса учителя приглашали на факультативы по информатике, где мы изучали графы, алгоритмы сортировки массивов и многое другое.

Задачи


Посмотрим на совершенно типичную задачу для начинающих программистов-олимпиадников
Пятью пять — двадцать пять!
(Время: 1 сек. Память: 16 Мб Сложность: 8%)
Вася и Петя учатся в школе в одном классе. Недавно Петя поведал Васе о хитром способе возведения в квадрат натуральных чисел, оканчивающихся на цифру 5. Теперь Вася может с легкостью возводить в квадрат двузначные (и даже некоторые трехзначные) числа, оканчивающиеся на 5. Способ заключается в следующем: для возведения в квадрат числа, оканчивающегося на 5 достаточно умножить число, полученное из исходного вычеркиванием последней пятерки на следующее по порядку число, затем остается лишь приписать «25» к получившемуся результату справа. Например, для того, чтобы возвести число 125 в квадрат достаточно 12 умножить на 13 и приписать 25, т.е. приписывая к числу 12*13=156 число 25, получаем результат 15625, т.е. 1252=15625. Напишите программу, возводящую число, оканчивающееся на 5, в квадрат для того, чтобы Вася смог проверить свои навыки.
Входные данные
В единственной строке входного файла INPUT.TXT записано одно натуральное число А, оканчивающееся на цифру 5, не превышающее 4*10^5.
Выходные данные
В выходной файл OUTPUT.TXT выведите одно натуральное число — A2 без лидирующих нулей.
Примеры:
INPUT.TXT
5
75
4255
OUTPUT.TXT
25
5625
18105025


Требования

От олимпиадника требуется написать программу на одном из принимаемых языков (обычно этот набор состоит из Pascal (сам пишу, никогда проблем не было), Delphi, C++, Java, Visual Basic, в последнее время добавляют C#, Python). После этого исходный файл отправляется в систему-песочницу, где он компилируется и выполняется на группе тестов. За каждый тест участник олимпиады получает некоторый балл, которые потом складываются. После олимпиады результаты становятся видны всем. Чем больше суммарный балл — тем выше место.
Стоит отметить, что обычно проверяющими системами плохо обрабатывается управляемый код (Java, C#). Мой друг лично на региональном этапе получил на трех из четырех задач 0 баллов из-за ошибки во время выполнения (писал на C#), хотя проверялось все нормально. Что делать в таком случае не понял ни я, ни он; на апелляции жюри просто пожали плечами.

Риски

На чем можно проиграть? Существуют 7 типов ошибок:
Скрытый текст
Wrong answer
Неверный ответ. Результат работы программы не совпадает с ответом жюри
Неверный формат вывода или алгоритмическая ошибка в программе

Time limit exceeded
Превышен указанный в задаче лимит времени. Программа выполняется дольше установленного времени
Неэффективное решение или алгоритмическая ошибка в программе

Presentation Error
Отсутствие выходного файла OUTPUT.TXT
Файл не создан, неверное имя файла или сбой программы до открытия выходного файла

Compilation error
Ошибка компиляции. В результате компиляции не создан исполняемый файл
Синтаксическая ошибка в программе или неверно указано расширение файла. Возможно, что при реализации на языке Java был использован класс, отличный от Main

Memory limit exceeded
Превышен указанный в задаче лимит памяти. Программа использует больше установленного размера памяти.
Неэффективный алгоритм, либо нерациональное использование памяти

Runtime error
Ошибка исполнения. Программа завершила работу с ненулевым кодом возврата. В этом случае результат работы не проверяется
Возможно, в программе произошло обращение к несуществующему элементу массива, деление на ноль и т.д. Возможно, программа на C++ не завершается оператором «return 0» или по иной причине вернула ненулевой код возврата


Олимпиады


Как проходит всероссийская олимпиада по информатике?
Я прошел всего 5 этапов: 8-9 классы в школе, 8-11 классы в школе, муниципальный этап, дистанционный тур региональной олимпиады, региональная олимпиада. Далее идет всероссийский тур, но я на него, к сожалению, не попал. Сейчас я расскажу про те задачи, которые мне очень понравились.

Этап среди старшеклассников

Во время тура среди 8-11 классов была задача «Полиномиальные хэш функции» условие которой было записано на двух страницах формата A5. В этом условии была приведена краткая информация о хэш функциях, их истории, была предложена одна такая функция. Задача заключалась в её вычислении для массива входных данных. Нас испугало очень страшное название, сложная терминология, запись суммы её значком (тот который выглядит как буква E) и в результате её мало кто вообще начал решать. Условие сейчас найти, к сожалению, не смогу.

Муниципальный этап

Муниципальный этап получился просто убийственным по сложности.
Вот задача оттуда
Б. Бобр
Ограничения по времени: 1 секунда на тест
Ограничения по памяти: 64 Мб

Бобр собирается построить каскад плотин и уютную хатку в русле неширокой реки. Так получилось, что река протекает по идеально прямой траектории, и ширина реки настолько мала, что в рамках данной задачи мы можем ею пренебречь. На берегах реки стоят деревья, которые бобр может использовать для строительства. Ученые решили выяснить, насколько оптимально бобр выбирает места для строительства плотин и хатки с точки зрения минимального суммарного расстояния, на которое необходимо переносить деревья.
Напишите программу, которая по заданным координатам деревьев относительно начала прямого участка реки, если считать ось сонаправленной течению определяет координаты объектов, соответствующие минимальному суммарному расстоянию, на которое необходимо переносить деревья.
Формат входных данных:
В первой строке входных данных содержится единственное целое положительное число 1<=T<=10 – количество тестовых блоков, идущих друг за другом. В первой строке каждого тестового блока содержится два целых положительных числа 1<=N<=1000, 0<=М<=10, 0<=L<=100 – соответственно количество деревьев, растущих на берегах реки, количество деревьев, необходимое для возведения одного объекта и количество объектов, которые необходимо возвести. В каждой из следующих N строчек записано единственное положительное вещественное число – расстояние в метрах от начала прямого участка реки (самого высокого по течению) до места, где растет соответствующее дерево. Известно, что деревьев гарантированно хватает, чтобы построить все объекты (N>=M*L)
Формат выходных данных:
Для каждого тестового блока в отдельной строке необходимо вывести единственное число — сумму координат мест, в которых необходимо возвести объекты, чтобы суммарное расстояние, на которое потребуется перенести деревья для строительства, было минимальным, указав три точных знака после десятичного разделителя.
Пример входных и выходных данных:
Входные данные
2
5 3 1
0.1
1.2
5.6
7.3
9.4
2 2 1
1
2
Выходные данные
7.300
1.000


Решить задачу, если объект один достаточно просто. Но когда объектов больше — приходится применять достаточно сложный раздел программирования, «Динамическое программирование». Учитель, который вел у нас факультатив признался в том, что он плохо представляет как решить эту задачу (совместными усилиями мы вывели значение, которое нужно минимализировать, просто построив несколько графиков, даже не спрашивайте что это за значение — я его благополучно забыл).
В результате задачу на полный балл решил лишь один участник олимпиады.

А вот еще одна задача, решение жюри на которой было пересмотрено (из того же муниципального этапа):
А. Альбатрос
Ограничения по времени: 1 секунда на тест
Ограничения по памяти: 64 Мб
Альбатрос может совершать длительные перелеты, преодолевая длинные расстояния над просторами океана. Орнитологи решили определить, сколько километров может пролететь альбатрос, не посещая сушу. Для этого флотилия плавучих исследовательских лабораторий рассредоточилась по океану и записала данные об изучаемой особи, к которой прикреплена радиометка. Ученые фиксируют момент времени и текущие координаты того места, где они обнаружили альбатроса.
Напишите программу, определяющую расстояние, которое преодолел альбатрос в течение эксперимента, если считать, что в зоне наблюдений наша планета представляет собой идеальный шар радиусом 6366,197 километров.
Формат входных данных:
В первой строке входных данных содержится единственное целое положительное число 1<=T<=10 – количество тестовых блоков, идущих друг за другом. В первой строке каждого тестового блока содержится единственное целое положительное число 2<=N<=1000, количество записей о появлении альбатроса. В каждой из следующих N строчек записаны по двенадцать целых неотрицательных чисел (0<=d1<=90, 0<=m1<=90, 0<=s1<=90, 0<=d2<=90, 0<=m2<=90, 0<=s2<=90, 0<=h<=23, 0<=mt<=59, 0<=sec<=59, 1<=dd<=31, 1<=mm<=12, 2000<=yy<=2012) – соответственно градусы минуты и секунды северной широты, градусы, минуты и секунды западной долготы того места, где плавучая исследовательская лаборатория заметила альбатроса; время в формате часы, минуты, секунды и дата наблюдения в формате день, месяц, год.
Формат выходных данных:
Для каждого из тестовых блоков в отдельной строке необходимо вывести единственное целое число – расстояние, которое преодолел альбатрос, округленное до ближайшего четного целого числа.
Пример входных и выходных данных:
Входные данные
2
3
0 0 0 0 0 0 0 0 0 1 1 2012
0 0 0 0 2 0 0 0 0 3 1 2012
0 0 0 0 1 0 0 0 0 2 1 2012
2
0 0 0 0 0 0 0 0 0 1 1 2012
0 0 0 0 1 0 0 0 0 2 1 2012
Выходные данные
4
2

Достаточно простая задача: необходимо отсортировать значения по дате появления Альбатроса, вычислить длину каждой дуги между двумя точками, а потом их все сложить. В решении принимается допущение, которое позволяет использовать теорему Пифагора.
Но почему же решение было пересмотрено? Взглянем на диапазон минут и секунд.
0<=m1<=90, 0<=s1<=90
Вы, наверное, наивно предположили, что в одном градусе 60 минут? Или что в одной минуте 60 секунд? Ха-ха! Тут же явно написано «90».
Тесты были составлены именно с учетом перевода: в одном градусе 60 минут, в одной минуте 60 секунд. Это безобразие было успешно оспорено нашими учителями.
Самое обидное, что даже пример получился неправильный
В результате задачу не решил, по-моему, вообще никто.

Полный текст муниципального этапа можно найти тут.
Дистанционный тур

Задачи дистанционного тура были гораздо интереснее. Мне запомнились две задачи.
Вот первая
Г. Герой дня
Ввод/вывод: стандартный
Ограничения по времени: 1 секунда

Медиахолдинг «Пермь Великая» отслеживает сообщения блоггеров Пермского края и каждый день пытается выяснить, кто является наиболее популярным в записях для того чтобы включить этого человека в традиционную рубрику «Герой дня».
Для каждой записи, попавшей в список отслеживания, известно количество просмотров и те персоналии, которые в ней упоминаются. Напишите программу, определяющую человека, для которого суммарное количество просмотров для записей, где он упоминается, максимально.
Формат входных данных:
В первой строке входных данных приводится единственное целое число 1<=L<=10000 – количество записей, попавших в обзор за текущий день. В каждой из следующих строк вначале указывается число – количество просмотров соответствующей записи и затем имена и фамилии людей, упоминающихся в записи. Имена и фамилии состоят из букв английского алфавита, число, а также все соседние слова отделяются друг от друга ровно одним пробелом. Суммарная длина строки составляет не более 200 символов.
Формат выходных данных:
В единственной строке выходных данных необходимо вывести имя и фамилию человека, записи с упоминанием которого набрали больше всего просмотров. Если таких людей несколько нужно вывести того, кто идет раньше других по алфавиту.
Примеры входных и выходных данных:
Входные данные
1
100500 John Travolta John Lennon

5
5 Vasya Pupkin Sergey Syroezhkin
10 Harry Potter
5 Garry Potter Vasya Pupkin
5 Sergey Syroezhkin
12341234463456234123466543342 Arnold Schwarzenegger
Выходные данные
John Lennon
Arnold Schwarzenegger


Именно после этой задачи мне пришла идея «словаря», тип данных с удобным поиском по людям. Если кому интересно — напишу в комментариях, можете спросить в ЛС, но чувствую что это тот еще велосипед.
Необходимо составить список из людей с общим количеством просмотров (посмотрите на человека с идентификатором Arnold Schwarzenegger, требуется длинная арифметика), а затем просто выбрать нужного человека из нашего списка. Чтобы упростить алгоритм наши одиннадцатиклассники использовали хэш-функцию для имени (сумма всех ASCII номеров символов в имени), что существенно ускорило работу программы, коллизии получились небольшими.

Вторая задача или задача архивации
В. Великий архиватор
Ввод/вывод: стандартный
Ограничения по времени: 1 секунда

На планете роботов очень любят автоматическую обработку текстов. Для этого роботы ввели специальную должность Великого Архиватора. В обязанности Великого Архиватора входит составление списка всех слов текста и замена слов на число, обозначающее номер этого слова в списке.
Напишите программу, выполняющую функции Великого Архиватора.
Формат входных данных:
В единственной строке входных данных приводится строка длиной не более миллиона символов, состоящая из строчных и заглавных букв английского алфавита и пробелов. Любые два соседних слова в тексте разделены ровно одним пробелом. Слова считаются одинаковыми, если они равны с точки зрения сравнения строк, причем строчные и заглавные буквы считаются различными.
Формат выходных данных:
В единственной строке выходных данных необходимо вывести последовательность номеров слов текста, причем слова в списке должны быть упорядочены в порядке их появления в тексте. Нумерация слов должна начинаться с единицы.
Примеры входных и выходных данных:
Входные данные
To be or not to be
Why do you cry Willie Why do you cry Why Willie Why Willie Why Willie Why
Выходные данные
1 2 3 4 5 2
1 2 3 4 5 1 2 3 4 1 5 1 5 1 5 1

Пояснение к примерам входных и выходных данных: текст во втором примере не содержит символов перевода строки и возврата каретки.


Достаточно простой алгоритм сжатия (не помню как называется). Мне было интересно реализовать. Я решил эту задачу созданием массива из слов, добавлял туда первое слово. Затем считывал каждое следующее слово, проверял, нет ли его в массиве. Если оно было — записывал в выходной поток номер слова, иначе — добавлял в массив, записывал номер.
В принципе, мое решение не получило полный балл.
Полный текст заданий можно найти здесь.
На дистанционном туре я занял 1 место среди девятиклассников.
Региональный этап

На этапе региональном было не так весело, тура было два. Я боялся подвести школу и не пройти на следующий этап, плохо показать нашу школу. Поэтому и задания воспринимались не так весело и приятно. В общем: ничего не запомнил оттуда, но получил заветный диплом. Да и условия мне не удалось найти.
На второй день к нам приехали представители местной компании «Прогноз», поиграли с нами в «Что? Где? Когда?», провели викторину. Победителям раздали призы.

Подготовка


Как же я готовился?
Ответ достаточно прост: у меня хорошие учителя. Мне это было интересно и я получал от всего происходящего удовольствие. Я усердно готовился и добился того, чего хотел.

Что делать, если Вам это тоже интересно и Вы хотите принять во всем этом участие?
  1. Существуют системы подготовки школьников к олимпиадам по программированию, на них есть тестовая система и куча условий с решениями. Насколько я понимаю, на всех таких системах нужна регистрация. Я готовился при помощи двух:
    • acmp.ru Есть достаточно много задач разной сложности, так же интересен раздел «Курс олимпиадника»
    • http://acm.timus.ru/ Куча задач с самых разных олимпиад, некоторые на английском. В разделе http://acm.timus.ru/offline у нас проводился дистанционный и региональный этапы.
  2. Существуют онлайн олимпиады, я участвовал лишь в одной: NetOI от украинцев. Отзыв такой: ХАРДКОР!!! Дальше второго тура не прошел. Код нужно писать ужасно оптимально (я так не умею), для каждого теста индивидуальные условия (удвоенное время программы жюри).


Что же дальше?


Говоря это, я подразумеваю вопрос о том, насколько олимпиадники приспособлены к работе в реальных условиях.
Хоть я и не работал еще в IT индустрии, но я считаю: олимпиадники никак не приспособлены к реальной работе. На таких олимпиадах требуется уметь быстро изобрести «велосипед», знать хорошо алгоритмы. Я с другом занимаюсь написанием небольших игр и понимаю, что гораздо важнее уметь выбрать правильную технологию для твоих целей, уметь найти готовое решение чтобы ускорить разработку, «Велосипеды не нужны». Поправьте меня, если это не так.
Если кого интересует то, чего я в жизни хочу: на самом деле я не очень-то люблю IT и информатику, мечта моя — выучиться на физика-теоретика и заниматься исследованиями. А так как в РФ с этим проблемы я планирую уехать в Канаду или США.

Приму любые пожелания в ЛС или в комментариях. Надеюсь, данная статья не получилась длинной. Надеюсь она была для Вас интересна. Надеюсь Вас не раздражала моя неграмотность, уж очень я плохо знаю пунктуацию.

В фото для топика было использовано фото с www.psu.ru
Реклама
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее

Комментарии 152

    +17
    Несколько неожиданный финал, и да, не совсем понятно, о чем же собственно Ваша статья.
      +14
      Финал простой. Мальчик в 9-м классе, поэтому не до конца понимает ценность олимпиадников в команде.
        +2
        Информатика, математика, физика. Даже не удивительно, что парень занимается разработкой игр, ему там многие бы позавидовали с такой школой. А то приходят и локти кусают, от банального «почему не учил вектора» до «почему прогуливал сопромат».
      +3
      В единственной строке входного файла INPUT.TXT записано одно натуральное число А, оканчивающееся на цифру 5, не превышающее 4*105.
      Хех, ну надо же, какой привет из прошлого…
      До сих пор помню ту олимпиаду, которую завалил, поскольку думал, что O(N2) при N = 107 — это очень мало…
        +1
        Думаю, что там имелось в виду 4*10^5.
          +2
          Спасибо, кэп!
        +1
        Эх… Так захотелось опять в школу и на олимпиады… Жаль что пролетело это время беззаботности и свободы… (Тут, думаю, автор со мной не согласится, но прийдет время и точно так-же станет грустить за школьной и институтской жизнью)

          +10
          А что у вас сейчас со «свободой»?
            +4
            А не считаете ли странным то, что будучи 17-летним подростком, вы задаете вопрос “А что у вас сейчас со «свободой»?” тому, кому 23 лет. Когда мне было 23 лет я вовсю потерял чувство свободы, потому что мне пришлось работать программистом и не потому что так хотел а потому что должен был! Но вместо этого я мечтал о том чтобы продолжить учебу, но это никак не было возможным. И это я называю быть “не свободным”. Так что ваш вопрос для меня кажется по меньшей мере странным.
              +3
              Я бы задал тот же вопрос. Мне 22. Почему я могу полностью распоряжаться своим временем и делать то, что хочу, что мне интересно? Что не так?

              На мой взгляд, «отсутствие свободы» каждый сам себе старательно создает. Это просто вопрос приоритетов и целей.
                +1
                Слово «свобода» в данном случае я использовал с философской точки зрения, если можно так выразится. Может правильней было сказать «меньше ответственности». Сейчас я работаю преподавателем в колледже и обязанностей стало на порядок больше по сравнению с периодом учёбы. Хотя осознал я это только перед самим дипломированнием, а до этого единственной мечтой было поскорее защититься и выпустится в широкий мир полный новых свершений и бла-бла-бла…
                  0
                  Могу ответить на Ваш вопрос. Мне 24. Живу и работаю в США.
                  Увы, но распоряжаться могу только временем на выходных. Так как в будние дни приходиться работать.
                  Более того один выходной и почти все вечера отдаю собственному проекту. Так что из 7 дней я могу отдыхать только один. Когда мне было 17 — все было диаметрально противоположно, денег особо много не надо было. Так что работал всего пару дней в неделю, а остальное время получал удовольствие от жизни. Сейчас же надо платить за жилье\машину\еду etc. и позволить себе самому распоряжаться своим временем — нету возможности.
                    +3
                    Так создай эту возможность. Уж для кого, а для программистов это даже проще, чем для остальных.
                      0
                      Вы удивитесь. Вот я и создаю, как я уже сказал по вечерам и выходным. Сейчас в ущерб себе, но с тем что бы в будущем получить из этого выгоду.

                      И вы совершенно не правы насчет того что программистам это проще. Разработка ПО это такая же работа как любая другая. Она требует тратить на нее время и силы. И от этого никуда не денешься.

                      Можно конечно работать по пару дней в неделю, но и профита от этого будет меньше. А если хочеться кататься на красивых машинах, кушать в хороших ресторанах и жить в большом доме — то надо работать.
                      А это я еще в разводе, а если жена и дети есть? Их тоже надо поддерживать, кормить одевать и т.д.

                      Так что чем старше становишься тем, в большинстве случаев, становится меньше времени.
                        +1
                        Программист может поднять свой проект, люди многих других профессий — нет. Бизнес конечно каждый может открыть теоретически, но все равно у IT специалистов тут серьезная фора. Особенно если разбираться в финансах и инвестировании ))

                        А если хочется кататься на красивых машинах и кормить детей и жён, то, как говорится, сам себе злобный буратино. Каждый сам создает свою жизнь и имеет возможности делать ее такой какой хочет.
                          0
                          Вот в чем дело — бизнес не появляеться из воздуха, в начале надо вкалывать. А когда вкалываешь — то времени у тебя нету)
                          Не бывает так что бы все и сразу. Мы, увы, не в книгах стругатских живем)
                            0
                            Это понятно. Просто стоит различать «отсутствие свободы» и трату свободного времени «по собственному желанию» :)
                        0
                        Прошу прощения за сумбурную речь. Не проснулся до сих пор.
                      +1
                      Мне 22. За время учёбы я регулярно ездил на все соревнования, на какие только мог поехать. Теперь у меня есть работа, семья и ребёнок. В моей стране мою работу потерять не критично, но надо будет приложить некоторые усилия, чтоб найти с такой-же зарплатой и с такими же суловиями.
                      На прошлой неделе по старой памяти меня взяли ещё на одно соревнование по робототехнике. Сколько же надо было усилий приложить, чтоб выкроить время для того, чтоб поехать.
                      Особенно грустно было, когда я понимал, что это, скорее всего, мои последние сорвнования.
                        0
                        Если все дело только в деньгах, то есть как минимум несколько способов разной сложности обеспечить себе более или менее стабильный пассивный заработок. Было бы желание этим заниматься. У меня ушел всего год на то, чтобы создать достаточно стабильный инвестиционный портфель из которого еще и больше половины дохода реинвестируется.

                        Странно при этом только то, что большинство людей предпочитает обложить себя проблемами и «грустить» о свободном времени, молодости и прочем.
                +1
                >>олимпиадники никак не приспособлены к реальной работе

                Ага, расскажите Дурову.

                А если честно — олимпиадные задачи — классическое ATDD (обычно несколько проверочных тестов указанно). Причём в условиях автоматической проверки. Так что к ежедневным сборкам такой человек весьма подготовлен.

                И да, если Вы будете на олимпиадах выдумывать всегда велосипеды — вы проиграете. Использовать надо в основном проверенные решения и алгоритмы.
                  +2
                  Скажем так, на олимпиаде требуется умение быстро собрать свой велосипед из проверенных запчастей-алгоритмов.
                    0
                    Ну так и в реальной жизни редко когда «скачал и заработало» — тоже допиливать и группировать известные технологии приёмы надо. Ну а уж рабочая извилина — везде пригодится
                      +1
                      В реальной жизни другой уровень у этих готовых технологий. Участвовал давненько в олимпиадах, когда активно уже не плохие программы писал, знания из разработки «традиционных» программ не особо пригодились в олимпиадах, точнее совсем там никак не применялись.
                    0
                    Хм, могут ли минусующие назвать причину? А то как-то интересно…
                      0
                      Дважды чемпионом мира был Николай Дуров, а ВКонтакте написал его брат Павел Дуров.

                      Правка: это ответ на пост на уровень выше.
                        0
                        "«ВКонтакте» осуществляет финансовую поддержку развивающихся Олимпийских игр по программированию в России и спонсирует команды программистов Санкт-Петербурга и Северо-Запада России. Среди работников компании лучшие российские программисты, лауреаты международных конкурсов по программированию и математике."

                        Именно это я имел ввиду. А вот чтоб поднять свою компанию — надо прежде всего быть хорошим управленцем, а не программистом.
                          +1
                          Ну ВКонтакте, Яндекс и mail.ru нанимают олимпиадников не потому, что у них какие-то очень релевантные скилы с олимпиад, а потому что если добился чего-то в олимпиадах, значит голова на плечах есть, значит сможешь добиться многого и на производстве.
                    –5
                    Вот за что я не любил никогда эти задачи:
                    Входные данные
                    To be or not to be
                    Выходные данные
                    1 2 3 4 5 2

                    если мы заменяем каждое слово, то на выходе должно получиться 1 2 3 4 1 2. И вот таких ошибок полным-полно. Не говоря уже о «по разному» настроенных компиляторах (хотя в положении написаны «используемые аргументы», на деле не всегда получается одинаково). Чаще всего ошибки компилятора были как раз-таки при использовании паскаля.

                    В целом — конечно, это интересный опыт. Жаль, что ему уделяют мало внимания на первых этапах, что приводит к вышеописанным ошибкам.

                    П.С. наверное стоит извиниться, ведь прочитав фразу еще раз, там подразумевается также и регистро-зависимость. «To» !== «to»
                      +2
                      Это — не ошибка! «To» и «to» — два разных слова.
                      Слова считаются одинаковыми, если они равны с точки зрения сравнения строк, причем строчные и заглавные буквы считаются различными.

                      PS какая замечательная задача получилась…
                        0
                        «To» != «to»
                        И нам это вдолбили в голову еще на общем курсе, когда тема была «Строки».
                          0
                          Верно, но не всегда.
                          В любом случае надо смотреть условие задачи. Подобные вещи всегда оговариваются заранее на любом уровне кроме школьного.
                            +1
                            нам это вдолбили в голову еще на общем курсе
                            Хм… Что-то мне вот это видео вспомнилось (смотреть с 07:40 до 10:30).
                            0
                            А минусовать-то за что? я же добавил, что касательно задачи, не учел все данные. А сам комментарий — мой опыт, в мое школьно время.
                              0
                              пример — часть условия. так что даже если в условии не написано «регистро-зависимый», то из примера это должно стать понятно
                              +5
                              По поводу приспособленности к реальной работе. Языки и технологии — это всё вторично. Умение формализовать задачу, придумать оптимальный алгоритм её решения — вот это настоящее дао программирования. Олимпиады качают именно этот скилл.
                                +2
                                В реальной работе редко важны алгоритмы. А вот языки и технологии — постоянно. И архитектурные навыки.

                                Если провести аналогию, то, по вашему, в строительстве не важны инструменты и техника, а самое главное — крутой цемент замешать и хорошие кирпичи сделать. Так вот, кирпичи и цемент уже за вас сделаны (алгоритмы большей частью придуманы). А вот владение краном и экскаватором очень пригодится (языки и технологии).
                                  0
                                  Смотря какая работа. Как и на стройке. Бывают дизайнеры и архитекторы, а бывают работяги на экскаваторе. Если хотите всю жизнь писать сайты на php, то нет проблем. Тогда изучайте php и будьте счастливы.
                                    +1
                                    Я про что и говорю. При разработке сложных программных систем важнее всего навыки архитектуры. Олимпиады его не качают.
                                    Безусловно, олимпиады хороши и очень полезны, но они скорее качают скилл «getting things done». Быстро накодить, чтобы выполняло задачу. Важный практический скилл. Но это не «дао программирования».

                                    А хорошее знание «своего» языка, сопутствующих фреймворков и инструментов — это ценный багаж, который позволяет быстро и качественно выполнить задачу. Многие это недооценивают. Говорят, что «если ты реальный программист, то можешь на чём угодно писать». О да, конечно, могу, но сколько времени займёт то, что называют «get up to speed»?

                                    И у разных языков и технологий разная «стоимость разработки». Не всегда хочется менять одно на другое. Это как с шуруповёрта на отвёртку поменять. Результат одинаковый, но процесс…
                                      +3
                                      Реальная задача из реальной практики. Сделать небольшой модуль ERP для конкретного производства. Есть заявки, есть схемы сборки, есть список участков производства, на которых можно выполнять операции, есть список рабочих, которые обучены определённым операциям. Надо сделать админку для ввода заявок, списка рабочих и т.д. и на выходе получить распечатки с расписанием, какой рабочий куда должен пойти, чего и сколько напилить.

                                      Один программист сто лет кодит для Web, админку сделал за неделю. Он умеет сгенерировать PDF для распечатки. Одна беда — полгода мучил генератор расписаний. И всё время какие-то баги находились — то какой-то участок не догружал, то не поровну распределял работу по рабочим, то просто неэффективное решение было. Вручную можно было всегда посидеть и лучше придумать. И всё никак и никак. Потому что у него теоретической базы не было. И его алгоритм был просто кучей эвристик.

                                      А потом случайно взяли олимпиадника. Что такое индексы в базе данных — не знает, на перле никогда в жизни не программировал, как web работает — знает только как пользователь. Да, у него месяц ушёл, чтобы «get up to speed». Только алгоритм заработал уже через неделю. «Всего-то» надо было записать условия задачи в виде системы линейных неравенств и решить «обычную» задачу нахождения максимума. И программа стала искать очень крутые решения. Предусмотрел все граничные условия, ни разу с тех пор к этому алгоритму не возвращались.

                                      Понятно, что хорошие кодеры всегда нужны. Которые в совершенстве знают язык, платформу, технологию. И могут писать много и хорошо. Беда в том, что если требования меняются, то такой «программист на C++» наотрез отказывается изучать node.js или переходить с Windows на Linux. Люди сами себя прибивают гвоздями к одной нише и в ней кормятся. Каждому своё, наверное.
                                    0
                                    В реальной работе важно умение быстро учиться. То, чему сейчас научится школьник, через 5 лет будет уже не так актуально, и получится, что когда он мог развивать мозги он изучал технологии и языки, которые(конечно не все) уже умерли.
                                  +8
                                  Я в свое время (а закончил школу я в 2006 году) учился в похожих условиях — в физмат классе лицея №35 г.Челябинска. Много участвовал в олимпиадах по математике, физике, программированию, выше областного уровня, правда, не побеждал (на регионе в третий десяток входил — и то неплохо =)). Это, конечно же, очень полезный опыт. Особенно командные соревнования по программированию.

                                  Но, к сожалению, вывод из этой статьи (для меня по крайней мере) оказался верным на 100%. Участвовать в олимпиадах надо, да. Это очень полезно и круто. Но ставить во главу угла только победу и параноидально к этому идти все же, как мне кажется, не стоит. Из моих сверстников так называемые «победители многих олимпиад» не только не смогли нормально устроиться в дальнейшем на работу, но даже закончить университет. Все эти герои, кто поступил на смежные со мной специальности, вылетели к концу 1-2 курса. И тому есть объективные причины. Самая главная выглядит так: этот самый «победитель» смотрит, что большинство программы по матану, программированию и физике он уже знает, перестает ходить на пары и в конце его ожидает неприятный сюрприз в виде неизвестного ему материала на экзамене. Синдром «да я это уже знаю и умею!» встречается на каждом шагу! Такие люди не просто не полезны, они вредны для хорошего трудового коллектива.

                                  Искренне желаю автору не сбиться с верного пути, не схватить «звездную болезнь» и все будет отлично! =)
                                    0
                                    Ну, не соглашусь с вами. В 11 классе в 2008 году довелось добраться до заключительного этапа, так только для этого я проделал кучу работы: до этого 2 лета подряд ездил дополнительно учиться в ЛКШ, там набрал коллосальное количество знаний, (да и с тех пор книга Кормана всегда под рукой), которое потом мне не раз пригодилось, в том числе и в учебе: по той же дискре и линалу кучу однокурсников выручал решениями многих задач.
                                    А так вот тебе и экстремальные условия и умения быстро писать понятный код.
                                      0
                                      Я тоже с 14 лет занимаюсь олимпиадным программированием, но я не согласен с ТС. Да, не стоит забывать про учебу в университете, где учат соверменным методологиям промышленного программирования и учат писать код, но олимпиады — это ничем не заменимый опыт. Во-первых они развивают умение выполнять задачачи быстро, качественно и с помощью наиболее оптимального алгоритма, ведь на каждую задачу ставятся жесткие рамки по вермени и по память и большой набор тестов. Также приходится учиться безошибочному кодингу, иначе серьёзный алгоритм замучаешься отлаживать, а за каждую попытку по системе ACM и многим другим начисляется штраф. Из всего этого рождается правильный стиль программирования, кто бы что ни говорил. Конечно, многие олимпиадники пишут код без пробелов и отступов, лишь бы побыстрее закодить задачу, но по моему опыту это только увеличивает время её решения. Я сам привыкал к стандартам месяц, но когда стиль был доведен до автоматизма, время решения задачи очень сильно сократилось. И я уже не говорю об нижеупомянутом «умении мыслить», набрав достаточный опыт (более 5 лет) и большой багаж продвинутых алгоритмов, ты можешь взглянуть на задачу любой сложности и в голове сразу рождается мат модель задачи и оптимальный алгоритм её решения. Недаром многие известные IT компании проводет олимпиады по программированию (Google Code Jam, VK Cup, ABBYY Cup), а наиболее успешных участников приглашают к себе на работу.
                                        0
                                        Могу уточнить про пробелы, отступы и названия переменных: лично я быстро привык к правильной разметке кода с отступами (часто очень помогают системы автоматизированного написания кода с отступами и пробелами), а интуитивно-понятные названия переменных и комментарии только ускоряют решение и отладку задачи.
                                    • НЛО прилетело и опубликовало эту надпись здесь
                                        +2
                                        Я вот тоже школьник, правда в 8-ом классе, нахожу такие олимпиады, ИМХО, бесполезными, максимум забавными. Я учавствовал в Киеве, и даже занял 1-е место на уровне города (дальше не пустили по возрасту), но сейчас понимаю что ничего не решает.

                                        Сколько бы те несостоявшиеся программисты-математики говорили о важности спортивного программирования как такового, этот факт остется преувеличенным. Давайте подумаем, чему нас учат задачки с Codeforces или TopCoder. Они «учат мыслить» и «писать правильный код» скажут нам труъ олимпиадники.

                                        «учат мыслить»: учат строить исключительно математическую модель решения (комбинаторика, графы, дин. прог)
                                        «писать правильный код»: ну-ну. разобраться в решении кого-либо невозможно. Как и дебажить его код. Пишут в условиях гонки такой код, от которого дурно. — эти люди не слышали о coding styles…

                                        Не выигрывал я топовые контесты по спорт. программированию, только сижу сейчас в Googleplex, штат Калифорния. Научился мыслить — да. Научился писать код — конечно, только спорт. программирование мне тут порядно навредило.

                                        У меня есть несколько знакомых, которые попали в Google, Microsoft, etc через спорт. программирование. Они сами жаловались, что там их полностью переучивали. Это путь умного человека к хорошему программисту, который пройти очень сложно.

                                        А насчет PE могу сказать, что это только лень писать нормальные чекеры :)
                                        • НЛО прилетело и опубликовало эту надпись здесь
                                            0
                                            Сейчас везде ООП. Я его достаточно легко понял так как занялся им еще до усердной работы над олимпиадами.
                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                –1
                                                Конечно везде ООП. Мыслить объектами легче чем pure массивами и указателями.
                                                –26
                                                Выбирайте Python/C++. Java и C# — прошлое. Очень плохие вещи, на мое мнение.

                                                А я на олимпиадах с простых задач стебусь, пишу решение типа:
                                                class Solution
                                                {
                                                public:
                                                    Solution();
                                                    ~Solution();
                                                    void init();
                                                    void solve();
                                                    void results();
                                                };
                                                
                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                    0
                                                    Google Code-In 2012 — я финалист. Сейчас в Маунтин-Вью приехал повстречаться (оплатил Гугел мне поездку) с людьми из Гугела, поработать немного. Отчет на хабр пишу.

                                                    П.С. Насчет джавы и шарпа — сугубо личное мнение — ИМХО, как говорят.
                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                        –11
                                                        Могут, но я не прочь порисковать! А я бывало похожее, но уж очень не настолько категоричное, писал в постах про шарп… Карму хомячки только так сливают
                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                            –10
                                                            Нет, ну отражать свою неполноценность в минусах к карме — дело очень популярное на хабре. Вот за комментарии мои тут получил горку минусов и даже отняли кармы (моя прелесть :D). Хотя я так и не получил комменты с ярким хэйтингом.
                                                            • НЛО прилетело и опубликовало эту надпись здесь
                                                                –6
                                                                Это уже философия. Ты или общество — система права или нет. Мозги так сломать можно :D
                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                    –9
                                                                    Все. Хватит, а то ребята еще hate-HATE. Прошелся по твоим комментам — помог чем смог :)
                                                            +5
                                                            Java и C# — прошлое.

                                                            Карму хомячки только так сливают

                                                            Знаете, оскорблять сообщество — там где с вами не согласно приличная часть этого сообщества — это уже хамство.
                                                              –9
                                                              Да никого я не оскорбляю. Разве что тех, кто без повода сливает карму. Вы вырываете из контекста слова и говорите, что я называю джава-разрабов и шарперов хомяками. Но не так ведь!

                                                              А то, что Java и C# — прошлое, мое ИМХО. Я уверен что много кто меня в этом поддержит
                                                                +1
                                                                Как я увидел так и цитировал.

                                                                По поводу Java и C#.
                                                                Какой язык имеет достаточно серьёзный уровень реализации ООП при приемлемой скорости выполнения, который вы видите на замену этим?
                                                                  –3
                                                                  Python или С++ (который, к сожалению умирает...)

                                                                  П.С. Вы бы в контексте Java не говорили о перфромансе.
                                                                    +4
                                                                    Python или С++ (который, к сожалению умирает...)

                                                                    Python не имеет статической типизации.
                                                                    С++ имеет не очень приятный синтаксис и заставляет всё время отвлекаться от бизнес-задачи на решение технических деталей.

                                                                    Ни один из этих языков не совсем подходит для создание бизнес-ориентированных проектов. Тут как раз раздолье C# и Java.

                                                                    Вообще, советую поучаствовать в большой командной разработке, прежде чем выносить языкам приговор.
                                                                      –3
                                                                      Насколько Java и С# кросс-платформены? Java — ладно, но чего стоит эта кросс-платформенность? Перформанса. Я не видел ни одной java проги, которая не «лагает»

                                                                      А насчет шарпа? Реально поднять на нем Win/Mac/Linux (Android/iOS/BlackBerry) приложение?

                                                                      С++ сейчас ИМХО самый лучший вариант. Сочитание перформанса и кросс-платформенности.
                                                                        –2
                                                                        Про Mono слышали? А также Monotouch, monodroid и так далее. Кроссплатформенность есть. И даже без тех страшных глюков которые принято упоминать в связи с этими словами (у mono сейчас очень мощная поддержка и развиваются они отлично).
                                                                          0
                                                                          В нашей фирме разрабатывают/поддерживают приложение на C# очень ограниченными ресурсами под следующие платформы:
                                                                          — Windows
                                                                          — Android
                                                                          — iOS

                                                                          Пока не добрались до WP, но там C# вообще нативный.
                                                                          Если бы разрабатывали на C++ оно бы до сих пор света не увидело. Слишком мало разработчиков(не то что толковых, а вообще), слишком длинный цикл разработки — не подходит он для бизнеса, как я уже говорил.
                                                                            +1
                                                                            Вы понимаете, что перформанс джавы при правильном ее применении очень даже высокий…
                                                                            Тот, кто говорит, что Java медленная просто не умеет готовить Java-машину.

                                                                            Цитата:
                                                                            Я не видел ни одной java проги, которая не «лагает»
                                                                            Конец цитаты

                                                                            Посмотрите на программы, обрабатывающие биржевые данные, например, с NYSE. На 2010 год они справлялись с 500 000 транзакциями в секунду. Сейчас еще больше. И все это на джаве.

                                                                            Я ни в коей степени не ругаю с++, наоборот, сам на нем пишу и очень доволен

                                                                            И еще. Как еще гугл терпит такое вот сочИтание непонимания?
                                                                            А так, Вы, конечно, молодец)
                                                                              0
                                                                              500 000 транзакций в секунду — это разве показатель эффективности?
                                                                              Мне вот кажется, что <sacrasm>уж моя-то программа в секунду весь миллиард обработает</sacrasm>!

                                                                              Пока нет сравнения биржевой программы на C++ и на Java, эти 500 000 транзакций в секунду — пустой звук для неспециалиста в данной области.
                                                                            –1
                                                                            О чем я говорю? Наш спор выглядит так: я говорю, что шарп и джава хуже, чем С++ (фигней страдаю, короче), а вы их защищаете.

                                                                            Так как джаверов больше чем С++ров, то вы получаете плюсы, а я — минусы.
                                                                              +1
                                                                              Предлагаю прекратить. Все языки нужны, все языки важны. Кому-то больше по душе Java, кому-то C#, кому-то C++. Факт таков, что применяется и то, и другое.
                                                                                0
                                                                                Вообще-то Python Java/C# и C++ сравнивать нельзя. Это разные языки со своим кругом задач. С++ — это низкоуровневый язык, в то время, как Python динамический язык с более высоким уровнем абстракции, чем Java(привет капитан). Python можно сравнивать с Ruby/PHP/Perl… etc. Java и C# между собой, а С++ разве что с Objective-C и то с натяжкой.

                                                                                Есть куча задач, которые решались и будут решатся Java(и да я видел программы на Java которые не лагали, тем более таких полно на C#).

                                                                                Про какую мультиплатформенность идет речь? На питоне можно написать мультиплатформенное оконное приложение, которое не будет тормозить? На Java можно, даже на C# можно постаратся. Если производительность критична — берем С++ с qt, но и там не так все гладко может быть.

                                                                                К тому же, не стоит забывать, что Java принесла прекрасную платформу JVM, на которой выросли отличные языки, как Scala и Clojure. У .net тоже свои фишки, но все же он больше заточен под винду, mono конечно хорошо, но пока далек от идеала.
                                                                                  +1
                                                                                  На питоне можно написать мультиплатформенное оконное приложение, которое не будет тормозить?


                                                                                  Да. Вы бы не орали так на питон, не попробовал его.
                                                                                    0
                                                                                    Я и не ору на питон, отличный язык, но для своих целей, я вот на нем скрипты пишу, а еще он для веба годный(реддит на нем написан). Проблема некоторых программистов они считают, что их избранный язык подходит для всего — это узость мышления. Программирование это намного больше чем знание 1 языка, языки всего лишь инструменты.
                                                                              0
                                                                              Пока в MTV – поговорите там в гугле на тему ООП и языков, которые применяются в продкашене. Много интересного можно узнать и про С++, который «умирает», и про «перформанс» Java.
                                                                            +1
                                                                            java и c# используются сейчас везде, это самое что есть настоящие, а pyton только для плагинов и веб-бэкэндов
                                                                            –1
                                                                            А я очень хочу, чтобы Java ушла в прошлое…
                                                                              0
                                                                              За что вы с ней так? Замечательный язык, правда порой очень сильно достаёт, но всё-же хороший.
                                                                                –1
                                                                                Замечательный язык

                                                                                Был. 10 лет назад.
                                                                                  +1
                                                                                  А что в ней такого, что делает её устаревшей? Разве что с вебом, хотя есть EE
                                                                                    –2
                                                                                    Навскидку.
                                                                                    1. Абсолютное отсутствие функциональной парадигмы
                                                                                    2. Нету pattern matching
                                                                                    3. Нету пользовательских value type
                                                                                    4. Type Erasure
                                                                                    5. Все коллекции mutable
                                                                                    6. Нету Mix-in'ов
                                                                                    7. Нельзя сделать класс видимым только в определённом наборе пакетов (вроде в Java 9 что-то обещали сделать)
                                                                                    8. С примитивами нельзя работать как с классами
                                                                                    9. Нету перегрузки операторов
                                                                                      –1
                                                                                      <sarcasm>
                                                                                      Стало быть, 10 лет назад в Java присутствовали:
                                                                                      1. функциональная парадигма;
                                                                                      2. pattern matching;
                                                                                      3. пользовательские value type;
                                                                                      4. type inference;
                                                                                      5. immutable коллекции;
                                                                                      6. миксины;
                                                                                      7. можно было сделать классы, видимые в определенном наборе пакетов;
                                                                                      8. с примитивами можно было работать как с классами;
                                                                                      9. была перегрузка операторов.
                                                                                      </sarcasm>
                                                                    +1
                                                                    Эм. С чего это Java и C# — прошлое?
                                                                    C# так вообще быстро расширяющийся, красивый язык с си-подобным синтаксисом, удобен.
                                                                    Не ради срача, но про то, что Джава и Шарп — прошлое, а Питон — будущее, вы зря сказанули.
                                                                      –1
                                                                      Кстати, да. Нарвусь сейчас на минусы. Это было личное ИМХО
                                                                      0
                                                                      А я так и на сложных задачах писал. Между прочим, при помощи правильной перегрузки оператора new можно реализовать очистку «какбыглобальных» переменных между различными тестами, если их напихано несколько в один файл.

                                                                      struct runner {
                                                                        // globals
                                                                      
                                                                        void run() {
                                                                          // решение
                                                                        }
                                                                      
                                                                        static void* operator new (/*не помню уже, что тут писать надо*/) {
                                                                          static char buffer[sizeof(runner)];
                                                                          memset(buffer, sizeof(runner), 0);
                                                                          return buffer;
                                                                        }
                                                                        static void operator delete (void*) {}
                                                                      };
                                                                      
                                                                      int main() {
                                                                        int n;
                                                                        scanf("%d%*c", &n);
                                                                        while (n-->0) {
                                                                          runner r* = new runner();
                                                                          r->run();
                                                                          delete r;
                                                                        }
                                                                      }
                                                                      
                                                                      Вот примерно с такой заготовкой я ездил на финал ICPC… Они как раз любители делать всего один мега-тест для каждой задачи.
                                                                        +1
                                                                        О да, комплексные тесты это «или пан, или пропал»
                                                                      +1
                                                                      Зря вы себя ломали. ООП и структурное программирование — не противоположности, а совершенно перпендикулярные вещи.

                                                                      Надо было начинать с оборачивания всего алгоритма в один объект. А там через месяц само собой пришло бы желание разбить его на два…
                                                                        0
                                                                        Учите Scala, не ошибётесь
                                                                        0
                                                                        Поэтому я параллельно и занимаюсь написанием чего-нибудь для себя. Сейчас вот обдумываю идею шутера про красные и синие кружочки в мире прямоугольников.
                                                                          +1
                                                                          Столько всяких фреймворков есть, напишите какую-то физическую игрушку на Box2D или какой-то платформер. Это сложнее, но гораздо интереснее!
                                                                          +2
                                                                          Зря вы так. Олимпиады учат тому, что можно просто взять и написать программу. Это — такой качественный переход, внезапно произошедший со мной на третьем курсе.

                                                                          Пишут в условиях гонки такой код, от которого дурно. — эти люди не слышали о coding styles…
                                                                          Научиться правильно оформлять код — задача на один месяц, проверено на себе.

                                                                          А насчет PE могу сказать, что это только лень писать нормальные чекеры :)
                                                                          Напротив, только нормальные чекеры PE и выдают — остальные только WA и умеют. Разумеется, PE — это не лишний пробел в выходном файле. PE — это когда программа выдает «Введите число N:» первой строчкой выходного файла…
                                                                            –1
                                                                            Научиться правильно оформлять код — задача на один месяц, проверено на себе.

                                                                            Это очень зависит от срока прибывания на олимпиадах :). Моих знакомых выше переучивали год-полтора. Оформлять — чертовски сложно. Даже, блин перейти с «a» на «parsedSize» очень сложно. Не говоря о сложностях струкутры.

                                                                            Напротив, только нормальные чекеры PE и выдают — остальные только WA и умеют. Разумеется, PE — это не лишний пробел в выходном файле. PE — это когда программа выдает «Введите число N:» первой строчкой выходного файла…

                                                                            Нет, я имел ввиду другое. Я о вещах типа отсутствия \n (EOF) или два пробела. Ведущий пробел или пробел в конце строки. Паскалевские чекеры не умеют читать потоком, они читают символьно, что-ли. А С++овые, или пайтоновские замечательно читают поточно.

                                                                            Тут и проблема форматирования вывода строго исчезает.
                                                                              0
                                                                              Вы сталкивались не с теми чекерами.
                                                                              Паскалевская библиотека testlib прекрасно читала поточно, проглатывая где надо лишние пробелы и переводы строк. PE в понимании testlib — это ошибка чтения из потока out (ошибка чтения из inp или ans — это FAIL).
                                                                            +7
                                                                            Я вот тоже школьник, правда в 8-ом классе, нахожу такие олимпиады, ИМХО, бесполезными, максимум забавными.

                                                                            Сколько бы те несостоявшиеся программисты-математики говорили о важности спортивного программирования как такового, этот факт остется преувеличенным

                                                                            Вы меня простите, но это просто ваша ограниченность и невежество (спишем это на ваш возраст).

                                                                            Олимпиадные задачи не учат писать правильный код. Но, действительно, они учат думать. Благодаря олимпиадным задачам вы можете хорошо познакомиться с классическими алгоритмами и впитать в себя их идеи.

                                                                            Многие из этих алгоритмов действительно не часто могут пригодиться на практике. Особенно если вы собираетесь всю жизнь программировать пользовательские интерфейсы и подобное. Если же вы собираетесь заниматься чем-то более серьезным, без знания классики вам будет тяжело. Сходите, например, вот сюда и решите задачи Nearby и Typeahead Search. Вполне себе олимпиадные задачи, имеющие прямое практическое приложение.

                                                                            Да и дело не только в прямом практическом применении. Это спор из серии «нужна ли математика программисту». Конечно, напрямую часто она не нужна. Программисту даже родной язык в принципе не нужен, ему достаточно разговаривать на C++. Это просто вопрос общей образованности.

                                                                            Никто не спорит, что на практике не менее важно уметь писать чистый, хорошо спроектированный код. Также важно разбираться в технологиях и все такое. Но, поверьте мне, всё это — ремесло, а не наука. Это приходит с опытом и дело нехитрое, если есть голова на плечах. Понимание математики и алгоритмов просто так с опытом не приходит, и упускать шанс их изучить, участвуя в олимпиадах — глупо.
                                                                              +5
                                                                              Я учавствовал в Киеве, и даже занял 1-е место на уровне города (дальше не пустили по возрасту), но сейчас понимаю что ничего не решает.
                                                                              С незапамятных времен на олимпиадах не запрещено соревноваться со старшими классами, к тому же, в олимпиадах по информатике это (вроде как) можно делать постфактум, ибо задания одни и те же для всех. Что же у вас не стряслось?
                                                                              Давайте подумаем, чему нас учат задачки с Codeforces или TopCoder. Они «учат мыслить» и «писать правильный код» скажут нам труъ олимпиадники.
                                                                              Я б с удовольствием почитал бы отзыв на подобии такого, но пока что вынужден констатировать, что вы оспариваете утверждения, которые сами же и сформулировали.

                                                                              P.S. Вот чего я не могу понять, так это почему столь много людей стремятся обосновать ненужность или даже вредность олимпиад по информатике. А главное, зачем? Этим занимаются, потому что нравится, а не для легкого поступления в вуз, подготовки к собеседованию в Google или бесплатных брендированых футболок.
                                                                                0
                                                                                Там первое место дали только потому что автор семиклассник был. По девятым классом 10 абс. Но автору респект :)
                                                                              0
                                                                              Ну не знаю, не согласен со многими коментаторами, ИМХО абсолютно праивильные выводы сделал паренек. Все таки технологи и теоретики это разные направления, и очень грамотный теоретик хорошо поставить и правильно разложит задачу, но применит знакомую технологию и это вовсе не означает самое оптимальное решение.
                                                                                –7
                                                                                Поэтому в многих компаниях разделяют людей на «математиков» — строят мат. модель и «технарей» — пишут грамотную реализацию. И угадайте, кто получает больше :)
                                                                                  +3
                                                                                  А чего мне угадывать, я знаю кто сколько получает. И это зависит не от специализации, а от уровня профессионализма и отвественности. И тут нужен симбиоз а не гонка за ЗП. Делать нужно то от чего удовольствие получаешь, а не то, что якобы, оплачивается выше. Дворник в Букингемском дворце получает побольше многих программистов.
                                                                                    0
                                                                                    Абсолютно согласен. Тут скорее даже вопрос в уважении со стороны компании. Если я правильно понимаю, то зарплата прямолинейно зависит от того, как тебя ценит компания.
                                                                                      0
                                                                                      Да согласен, нужнотолько уточнить термин «уважение». В наших реалиях запросто можно вопринять как кумовщину. Я думаю больше уместен термин КПД для компании.
                                                                                        0
                                                                                        Даже так: «личный КПД относительно компании». В точку!
                                                                                +1
                                                                                Принимал участие в олимпиадах с 9 по 11 класс, потом 4 года в университете. Сейчас работаю Java-программистом. Пригодилось умение читать задания и задавать вопросы, умение выискивать спорные места. Жалею, что не учил теорию вероятностей как следует, сейчас это бы мне пригодилось (та же теорема Байеса, которую я сейчас осилить до практического применения никак не могу).
                                                                                  0
                                                                                  А насколько реально такому человеку, как мне, попрактиковаться в реальной разработке?
                                                                                    +3
                                                                                    А возьмите и напишите какой либо plugin к тому же jQuery и ведите разработку на github.
                                                                                    Напишите к нему тесты.
                                                                                    Вот вам первый шаг.

                                                                                    Затем возьмите framework(самый популярный) для языка, который вам больше всего нравится и сделайте с помощью стандартных элементов/пакетов блог.
                                                                                    Всё это реальная разработка. Вы прочитаете много интересного про то, что должно быть при регистрации, что такое ACL.
                                                                                    Познакомитесь с MVC.

                                                                                    Теперь пришло время смотреть и читать что такое SOLID, DRY и DCI. При чем читать вдумчиво.

                                                                                    А дальше опыт, опыт и опыт.
                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                        +1
                                                                                        Ну замените слово «jquery» на любой опенсорсный десктопный проект (незнаю, есть ли мобильные опенсорсы, должны быть, наверное)
                                                                                          +1
                                                                                          Я тут привел веб-ориентированную разработку по банальной причине — быстрее сделать и есть возможность сравнить результат. Как получилось у тебя и как делают другие.

                                                                                          Неужели MVC, SOLID, DRY и DCI вы относите только лишь к вебу?
                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                          +2
                                                                                          А можно написать что-нибудь собственное?
                                                                                          Ну, к примеру, MP3 плеер. Покажу всем мое видение опенсорцного плеера для Linux.
                                                                                            0
                                                                                            Можно, но не получится.
                                                                                            Я в школе тоже мечтал написать свою ОС для телефонов… Застрял на менеджере памяти.
                                                                                              0
                                                                                              ОС ведь занятие гораздо более трудное?
                                                                                                –1
                                                                                                У них есть одно и то же качество — их не потянуть в одиночку. Для того же плеера одна только обработка аргументов командной строки заставит опустить руки…

                                                                                                Разве что писать плеер, который работает как фильтр — читает stdin в формате MP3, выводит stdout в формате, пригодном для перенаправления в /dev/что-то-там. Но я не думаю, что подобная программа реально нужна кому-либо, кроме автора.
                                                                                                  +1
                                                                                                  Если начнете писать плеер, вам придется окунуться в омут спецификации музыкальных форматов.
                                                                                                  Затем в специфику работы с аудио драйверами.

                                                                                                  Лучше сначала изучить основы разработки, а потом замахиваться нечто грандиозное.
                                                                                                    0
                                                                                                    Не надо в омут. Можно взять готовый движок, напр. gstreamer или libvlc. Останется только интерфейс хороший сделать. Можно даже на питоне, например.
                                                                                                      0
                                                                                                      Очень тяжело понять MVC на примере работы создания исключительно V.
                                                                                                      Или того хуже, если создавать на основе MVVM, то ничего кроме обвязки движка не сделаешь, и ничего это не даст. По своему опыту говорю, т.к. делал где то в 9 классе подобное.
                                                                                            +1
                                                                                            Для реальной разработки вступите в опен сорс проект- это самый лучший вариант из всех.
                                                                                            0
                                                                                            Вспомнил свои школьные годы :D
                                                                                            У меня больше всего было проблем с русским языком и литературой, как бы это ни было странно.

                                                                                            У меня тоже были двойки и тройки по русскому языку и литературе в школе, хотя экзамен по русскому в университете я сдал на отлично =)

                                                                                            А в общем я немного впечатлён.
                                                                                              0
                                                                                              обычно этот набор состоит из Pascal (сам пишу, никогда проблем не было), Delphi, C++, Java, Visual Basic, в последнее время добавляют C#
                                                                                              Бедный Python, зачем вы с ним так?
                                                                                                0
                                                                                                Простите, запямятовал, сейчас добавлю.
                                                                                                  +1
                                                                                                  Python объективно подтормаживает не некоторых видах операций. И если на крупных соревнованиях проставить разные лимиты времени на разные языки — не проблема, то на начальных этапах есть риск невозможности решить задачу на этом языке из-за технических ограничений тестирующей системы.

                                                                                                  Обычно в правилах так и пишут —
                                                                                                  предоставление возможности писать на этих языках совершенно не означает, что жюри соревнования гарантирует возможность решить все задачи на каждом из них
                                                                                                  Гарантированное решение есть на языках Pascal и С++. Java, Basic, C# и прочие — попадают в область «не гарантированного» решения.

                                                                                                  Впрочем, я давно уже не школьник и в школьных соревнованиях не участвую, поправьте меня, если я ошибаюсь.
                                                                                                    0
                                                                                                    Если почитать про C# на сайте acm,timus.ru, то увидим:
                                                                                                    Решения на C# по времени работы и по объему используемой памяти сравнимы с решениями на Java. Поэтому, почти все задачи на Timus Online Judge могут быть сданы на C# без особых проблем по сравнению с C/C++ и Pascal. Для решения следующих задач лучше не использовать Java и C#: 1220, 1275, 1306.
                                                                                                      0
                                                                                                      Вот-вот, и я про то же. Попадется такая задача на олимпиаде — что, сразу прощай первое место?
                                                                                                        0
                                                                                                        Мой друг пролетел на С# совсем не из-за этого. Как ему надо было помочь я до сих пор не знаю.
                                                                                                  0
                                                                                                  Примерно на такой же олимпиаде был в этом году (олимпиада люберецкого района, учавствуют 5- 11 классы, я из 10), занял 2е место. Что интересно: это была первая олимпиада где разрешили писать на любом из популярных языков, однако, 99% писали на паскале и бэйсике, со своим ноутом и C# чувствовал слегка неуютно.
                                                                                                  Если говорить про приспособленность олимпиадников к реальным условиям то: да, совершенно не приспособлены, а оно надо? Задачи там скорее на построение алгоритмов, они не требуют тех знаний, которые дальше первых глав любых книг по кодингу. Если бы было приближение к реальным условиям то как на олимпиаду ушло бы много больше времени.
                                                                                                    0
                                                                                                    со своим ноутом
                                                                                                    Нет, я подозревал, что районные олимпиады проводятся ужасно, но чтобы настолько? о_О
                                                                                                      0
                                                                                                      У них просто информатик был идейный и поставил на все компы линукс. Когда заявился я, сказав что буду писать на шарпе он назвал это дело архаизмом и сказал что я не торт.
                                                                                                        0
                                                                                                        Ну, линукс в школах уже становится нормой, такое слово даже в мин. образования выучили.
                                                                                                        Но вот «разрешать писать на любом из популярных языков», не имея под них IDE — это они классно придумали!
                                                                                                          0
                                                                                                          Может линукс и норма (уверен что выбор пал не из за его реальных преимуществ, а в связи с бесплатностью), однако на практике ученикам, у которых на домашних машинах все та же винда весьма сложно что то в ней сделать без четкого указателя.
                                                                                                            0
                                                                                                            Под линукс можно писать на c# на mono
                                                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                      0
                                                                                                      Не повезло чуваку со школой. У нас дают слегка забить на уроки, благодаря чему удается уделять 3-4 часа на реализацию своего проекта.
                                                                                                        0
                                                                                                        146? :)
                                                                                                          +3
                                                                                                          > А так как в РФ с этим проблемы я планирую уехать в Канаду или США.

                                                                                                          Про учебу в штатах ничего не могу сказать, сам учился в России, но если это не срастется, то попасть после ВУЗа на работу в штаты, занимаясь олимпиадами, очень возможно. Медалька (или прохождение на финал или даже просто красный рейтинг на TC или CF) помогают рекрутерам не выбросить ваше резюме после прочтения, а на интервью потом будут спрашивать много задачек, похожих на олимпиадные.
                                                                                                          Сам дважды медалист ICPC, после второго финала сразу поехал в Microsoft, который меня заметил после победы на чемпионате урала (из MS я потом ушел, потому что там карьерный рост не так быстр, как хочется). За несколько лет здесь очень много общался с разными работодателями, проходил разные интервью, и могу сказать, что медальки ICPC и красный рейтинг ценятся в долине достаточно высоко. Так что не зависимо от точки зрения в споре о том, насколько полезен опыт олимпиад, сам факт участия в олимпиадах весьма ценен.
                                                                                                            0
                                                                                                            А когда эти олимпиады проходят? Тоже хочется поучавствовать
                                                                                                              0
                                                                                                              Школьный этап проводится осенью. Региональный (четвёртый) — где-то в конце января. Всероссийский — весной. Информация о последних двух появляется на сайте rosolymp.ru, о первых трёх — зависит от школы и региона. Полагаю, можно поинтересоваться у учителя информатики.
                                                                                                              0
                                                                                                              Охх… 9-й класс… Написание собственной недооси на асме, участие в олимпиадках по математике и инфе, непрестанно играющий Боб Марли… Как было здорово.
                                                                                                              Я, кстати, постоянно заваливал региональный тур. Там всегда есть скучные задачи на парсинг, работу со строками… Некоторые дарования только и могли, что решать такие задачи, а я (наверное, это было неправильно) брался за то, что поинтересней. В итоге всегда допускал какую-то оплошность, которую находил уже после олимпиадки. В итоге на всерос ехали алёшки, у которых там случался полный фэйл.
                                                                                                              Здорово, что пока у меня есть свободное время (ибо ещё 11-й класс не закончился), могу заниматься интересными штуками (реверсинг ^^).
                                                                                                                0
                                                                                                                а я (наверное, это было неправильно) брался за то, что поинтересней
                                                                                                                Это в корне неправильно. На Всероссе у вас тоже был бы фейл.

                                                                                                                А ошибки постоянно находятся через 5 минут после окончания тура, это всегда так…
                                                                                                                +3
                                                                                                                На 3-м курсе участвовал в олимпиаде, дык пришли паскальники, кто-то на си, кто-то даже на пхп пробовал, в итоге я выиграл на питоне, но суть в том что не кому было конкуренцию составлять. Меня сейчас терзают сомненья, я уже год работаю разрабом, а вдруг придет какой-то студент и уделает меня? ИМХО обычные разрабы бояться олимпиадников.
                                                                                                                  +1
                                                                                                                  А так как в РФ с этим проблемы я планирую уехать в Канаду или США.


                                                                                                                  Целепологание конечно у Вас неплохое, но мне кажется в 9 классе тяжело адекватно без идеализирования смотреть на такие вещи, США и Канада — там тоже не все просто, да теоретическая физика в этом возрасте просто термин за которым смутное понимание сферы деятельности, в процессе обучения, а уж тем более работы все на 90% окажется совсем не так как представляли.

                                                                                                                  А статью тоже почувствовал незаконченной.
                                                                                                                    0
                                                                                                                    Простите меня за незаконченность статьи.
                                                                                                                    Как я понимаю, физики-теоретики строят модель, а потом она проверяется уже другими физиками, ставящими эксперимент для доказательства или опровержения теории.
                                                                                                                    Да, США и Канада — штука сложная, для того чтобы поступить в ВУЗ США без материальных средств нужно сдать TOEFL как минимум на 100 баллов из 110. В SAT нужно тоже много (математика 740/800, чтение 670/770, правописание 680/780).
                                                                                                                    Я почитал отзывы самых разных людей и понял что нужно попробовать самому, одни говорят одно, другие — другое.
                                                                                                                      0
                                                                                                                      Вы представляете, если бы это так и было бы? :)
                                                                                                                      Да, «теоретик» может производить опыт не своими руками, но он обязан его продумать и переосмыслить результат. Иначе Вы получите человека оторваного от реальности.
                                                                                                                    +1
                                                                                                                    призер регионального этапа всероссийской олимпиады по информатике

                                                                                                                    Я как вечный победитель области скажу тебе, к сожалению, это ничего не дает.
                                                                                                                    Кроме того, твои одноклассники замучают тебя просьбами решить тебе за них пару задачек.
                                                                                                                    Вот собираюсь поступать в ВУЗ, возьму с собой пару дипломов, посмотрим, как это повлияет на зачисление.
                                                                                                                    И да, призер != победитель, я тоже призер олимпиады СпбГу, а льгот на Информатику нет, вот я и не стал пробиваться дальше
                                                                                                                      0
                                                                                                                      А зачем льготы по информатике? Я в них как-то смысла не вижу, ибо они могут повлиять только на информатику, а там пока что экзамены элементарные.
                                                                                                                        +3
                                                                                                                        Ну не скажите. ЕГЭ по информатике порой проверяют такие кадры, что у специалиста нет ни малейших шансов получить выше 90 баллов.

                                                                                                                        Реальный случай на апелляции:
                                                                                                                        После ключевого слова repeat обязательно должна идти переменная, здесь нельзя писать false!… Ну да, false — тоже выражение. Но у вас же цикл бесконечный получается тогда? Как вы его прервете-то?… А-а-а, вы break используете! Но break — это разновидность goto, его нельзя использовать в программах! Есть ведь теорема Дейкстры, что любой алгоритм может быть представлен в виде композиции последовательностей, циклов и ветвлений, а ваша программа эту теорему нарушает! И вообще, что я с вами спорю, я кандидат наук, а вы кто? Понимаете, ваше решение посчитали ошибочным 4 человека из 5, и среди них КАНДИДАТ НАУК! Все, не буду я вас слушать. Никого не интересует, что ваша программа работает, она написана неправильно, такого в школе не проходили.


                                                                                                                        Не было бы диплома с олимпиады — фиг бы я получил 100 баллов по информатике в аттестате…
                                                                                                                        0
                                                                                                                        Почему же ничего не дает? Мне это дало 3 разовых стипендии по 100 рублей каждая!
                                                                                                                        А еще 2 халявных компакт-дисков с играми, одну футболку и море халявных ручек!
                                                                                                                          +1
                                                                                                                          Оу-оу, потише, а то от 300 рублей мне снесет крышу :)
                                                                                                                          А если серьезно, то олимпиады только для тебя самого, хотя диплом тоже важен, наверное. Но как бы то ни было, посмотрим.
                                                                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                                                                              +1
                                                                                                                              Я забьюсь в угол и впаду в истерику :)

                                                                                                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                                                      Самое читаемое