Олимпиады (Как вы относитесь к ним?)
Модератор: Модераторы разделов
-
wzrd
- Сообщения: 323
- ОС: Debian Lenny
Олимпиады
Путь начинаюшего программиста может начинаться по разному... 1)Изучить глубоко язык, порешать немного простеньких задач на знание языка и углублятся в низкоуровневое программирование(может быть наоборот сначала "низкий" потом "высокий"), вникать в действие предпочитаемой платформы, учится грамотно использовать ее интерфейс и возможности ну и т,д, 2)Изучить язык, не вникая в интерфейс платформы, т.е. стандартные фозможности языка. А затем углубленно изучать алгоритмы и оттачивая технику их реализации, путем решения множества задач. Так обычно готовятся к школьным олимпиадам. Я понимаю что и у того и другого свои плюсы и минусы, Но мне бы хотелось услышать мнение людей постарше уже прошедших всё это...Скажите как вы относитесь к выше сказанному? И расскажите как начинали вы?
-
Фантом
- Сообщения: 463
- ОС: openSUSE
Re: Олимпиады
"Программистов вообще" в природе не бывает (или почти не бывает). Бывают системщики, прикладники в той или иной области, embedded-программисты и т.д. - в зависимости от этого правильным будет или первый подход, или второй, или еще какой-либо другой.
Соответственно, с выяснения, что именно планируется программировать, и надо начинать.
Соответственно, с выяснения, что именно планируется программировать, и надо начинать.
-
wzrd
- Сообщения: 323
- ОС: Debian Lenny
Re: Олимпиады
это все конечно понятно. но все таки есть же мнение большинства... что больше нужно и где нужно?
-
Clear_Mind
- Сообщения: 241
- Статус: Изредко заглядывающий
- ОС: openSuSE 11.1
Re: Олимпиады
В конечном итоге: а) ты пишешь софт который кому-то очень нужен (возможно это твоя работа); б) ты программируешь в свое удовольствие. Если не то и не другое, то ты зря тратишь время.
Если собрался писать приложения не только для собственного использования, то скорее всего знанием одного языка программирования не отделвешься, тут нужно и знание API и различных библиотек.
Если собрался писать приложения не только для собственного использования, то скорее всего знанием одного языка программирования не отделвешься, тут нужно и знание API и различных библиотек.
Bombers launch with no recall + Minutes warning of the missile fall
Take a look at your last sky + Guessing you won't have the time to cry
--- Iron Maiden (Brouther Than A Thousand Suns, 2006)
Take a look at your last sky + Guessing you won't have the time to cry
--- Iron Maiden (Brouther Than A Thousand Suns, 2006)
-
wzrd
- Сообщения: 323
- ОС: Debian Lenny
Re: Олимпиады
Clear_Mind писал(а): ↑31.01.2008 21:00В конечном итоге: а) ты пишешь софт который кому-то очень нужен (возможно это твоя работа); б) ты программируешь в свое удовольствие. Если не то и не другое, то ты зря тратишь время.
Если собрался писать приложения не только для собственного использования, то скорее всего знанием одного языка программирования не отделвешься, тут нужно и знание API и различных библиотек.
я скорее б). а как вы начинали? я думаю не только мне интересно узнать кто как начинал.
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: Олимпиады
Сразу сорри за многабукаф - мне самому скоро предстоит программеров готовить, так что наболело 
Как участник четвертьфиналов ACM я немного в курсе, что такое олимпиады
Это мощная тренировка алгоритмического мышления. Конечно, если вы собираетесь хоть какое-нибудь место получить. И с точки зрения результата (не в смысле занятого места, а в смысле дальнейшей работы) важно не только и не столько знание кучи алгоритмов (хотя, чтобы занять место на олимпиаде, это необходимо), сколько умение из неясной на первый взгляд формулировки (участники ACM ICPC знают, как там формулируют задачи
) вытянуть строгую постановку конкретной задачи, сообразить, к какому разделу какой теории она относится, передать ее знающему человеку или взяться решать самому, подобрать нужный алгоритм или изобрести свой. Скорее всего, через несколько лет после окончания вуза вы забудете большинство этих алгоритмов просто за ненадобностью. Но вы будете способны или вспомнить название нужного алгоритма (и отыскать его в книжках), или хотя бы выяснить, в какую книжку смотреть или какому специалисту передать задачу. Работодатели такие умения ценят. Попавшие в полуфинал без работы мягко говоря не остаются, на многих работодателей действует даже сертификат участника четвертьфинала.
Если вы хотите интересной программерской карьеры - имеет смысл начинать подготовку к ближайшему контесту. Существуют и школьные олимпиады, участие в них сильно поможет на студенческих.
Как участник четвертьфиналов ACM я немного в курсе, что такое олимпиады
Это мощная тренировка алгоритмического мышления. Конечно, если вы собираетесь хоть какое-нибудь место получить. И с точки зрения результата (не в смысле занятого места, а в смысле дальнейшей работы) важно не только и не столько знание кучи алгоритмов (хотя, чтобы занять место на олимпиаде, это необходимо), сколько умение из неясной на первый взгляд формулировки (участники ACM ICPC знают, как там формулируют задачи
Если вы хотите интересной программерской карьеры - имеет смысл начинать подготовку к ближайшему контесту. Существуют и школьные олимпиады, участие в них сильно поможет на студенческих.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
wzrd
- Сообщения: 323
- ОС: Debian Lenny
Re: Олимпиады
в олимпиадах я участвовал(не в командных, хотя один раз и вкоманде тоже но это было давно и мне не понравилось). суть задачи и алгоритм решения я нахожу не долго, но с реализацией часто возникают проблемы. кстати говоря дома все как то легче делать чем где то)
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: Олимпиады
Олимпиады — соревнования среди дискретных математиков, а не программистов. Я знаю олимпиадников, являющихся хорошими программистами (скромно о себе), знаю олимпиадников, из которых никудышные программисты, знаю хороших программистов, не блиставших на олимпиадах.
Среднестатистическому программисту 90% времени хватает примитивнейших знаний об алгоритмах. Оставшиеся 9% вполне заполняет wikipedia. И очень редко приходится изучать Кнута, выбирать алгоритм сортировки, наиболее подходящий для данного случая, изобретать свой алгоритм сжатия для своих специфических данных, и т.д. Потому что программирование — индустрия, ремесло, где надо предоставить определённый результат в чёткие сроки.
В общем олимпиады это хорошо, но этого не достаточно.
Вообще я бы сказал, что есть такое понятие «думать на языке». Когда я только начинал учить программирование, я знакомился с паскалем. Года через два я начал «думать» на нём. Я в уме представляю алгоритм, абстрактные циклы, условия, а с пальцев у меня стекает паскалевский синтаксис. Потом я учил С и С++. Мне было очень тяжело. Я думал на паскале, но я не мог думать на С. Я выдавливал из себя С-шные программы, ругался на непонятные ошибки (родные турбопаскалевские ошибки я знал чуть ли не наизусть). Вообще С пожалуй был моим самым сложным языком. Но я всё таки его выучил, и сейчас могу думать на нём (точнее на С++, на С я пишу очень редко). Полгода назад я изучил джаву, думать на ней я начал где то через месяц. В принципе я знаю ещё с полтора десятка других языков, но думать на них не умею. Умение «думать» на языке я считаю хорошим знанием языка. Это достаточно тяжело выразить, но надеюсь, мне это удалось.
Кстати ещё, для большинства языков, важно понимать, что лежит под ними. Когда я пишу на джаве, я примерно представляю себе, в какой байт-код это будет скомпилировано, как это будет JIT-скомпилировано, как с этим будет работать GC. Очень примерно, но тем не менее это полезно. При желании я могу спустится вплоть до прерываний и электрических сигналов в транзисторах. Это даёт целостную картину мира.
Для программирования важно быть знакомым с многими библиотеками и инструментами. Причём даже важнее уметь быстро вникать в них.
Всё вышенаписанное — сугубо техническая сторона вопроса. Так же есть отдельные дисциплины, вроде проектирования программ, управления проектами, проектирования БД, которые тоже нужно знать на определённом уровне. Даже банально общаться с людьми нужно уметь.
Среднестатистическому программисту 90% времени хватает примитивнейших знаний об алгоритмах. Оставшиеся 9% вполне заполняет wikipedia. И очень редко приходится изучать Кнута, выбирать алгоритм сортировки, наиболее подходящий для данного случая, изобретать свой алгоритм сжатия для своих специфических данных, и т.д. Потому что программирование — индустрия, ремесло, где надо предоставить определённый результат в чёткие сроки.
В общем олимпиады это хорошо, но этого не достаточно.
Вообще я бы сказал, что есть такое понятие «думать на языке». Когда я только начинал учить программирование, я знакомился с паскалем. Года через два я начал «думать» на нём. Я в уме представляю алгоритм, абстрактные циклы, условия, а с пальцев у меня стекает паскалевский синтаксис. Потом я учил С и С++. Мне было очень тяжело. Я думал на паскале, но я не мог думать на С. Я выдавливал из себя С-шные программы, ругался на непонятные ошибки (родные турбопаскалевские ошибки я знал чуть ли не наизусть). Вообще С пожалуй был моим самым сложным языком. Но я всё таки его выучил, и сейчас могу думать на нём (точнее на С++, на С я пишу очень редко). Полгода назад я изучил джаву, думать на ней я начал где то через месяц. В принципе я знаю ещё с полтора десятка других языков, но думать на них не умею. Умение «думать» на языке я считаю хорошим знанием языка. Это достаточно тяжело выразить, но надеюсь, мне это удалось.
Кстати ещё, для большинства языков, важно понимать, что лежит под ними. Когда я пишу на джаве, я примерно представляю себе, в какой байт-код это будет скомпилировано, как это будет JIT-скомпилировано, как с этим будет работать GC. Очень примерно, но тем не менее это полезно. При желании я могу спустится вплоть до прерываний и электрических сигналов в транзисторах. Это даёт целостную картину мира.
Для программирования важно быть знакомым с многими библиотеками и инструментами. Причём даже важнее уметь быстро вникать в них.
Всё вышенаписанное — сугубо техническая сторона вопроса. Так же есть отдельные дисциплины, вроде проектирования программ, управления проектами, проектирования БД, которые тоже нужно знать на определённом уровне. Даже банально общаться с людьми нужно уметь.
-
Flaming
- Сообщения: 2579
Re: Олимпиады
Вчера участвовал в областной олимпиаде
по Воронежской области. Жаль, ничего не занял призового.
-
SpeedHack
- Сообщения: 116
Re: Олимпиады
А меня кинули
Участвовал в районной и зональной олимпиадах, разорвал соперников на части (отрыв от второго места по балам более чем на 50% на зональной и примерно в 2 раза выше балов чем у второго места на районой). Кодил на любимом PHP, который уже изучаю примерно 2 года. Пришло время ехать на региональную (краевую) олимпиаду (Краснодарский край), в пробном туре меня опечалили - сказали что на олимпиаде участник может использовать: FreeBasic (QBASIC), FreePascal (Pascal), MinGW (C, C++). Кодится все в виндо-оболочке (кстати те же QBASIC кодеры были опечалены ввиду отсутствия хелпа в FreeBasic). Самый удачный варианты был у паскальщиков - в их распоряжении была IDE, а не только компилятор. Остальные писали в Notepad/Wordpad и пропускали исходники через компиляторы.
Мне было тяжко. О C я до того момента только читал. Мной были как-то написаны программы для перевода градусов из цельсия в фаренгейта на чистом C (Пример из книги Д. Риччи) и программа Hello World. А ведь без практики никуда. Пришел в гостиницу (нас жило 6 чел в комнате: me, 2 basic, 1 pascal, 2 C++). Попросил челов, которые кодят на С++ объясняить, как работать с входными и выходными файлами. Больше никакой подготовки не было
На след день, пытаясь написать хотя бы одну задачку, дабы не стать топ лузером олимпиады. В итоге первую самую простую задачу писал 2 часа, который на PHP вполне реально было написать менее чем за 30 минут для меня. Однако, программа прошла 9 тестов из 10 (27/30 баллов). Даже принялся за 4-ую задачу, написал, но за нее мне дали всего 15 / 50 баллов, не знаю даже почему, вроде все правильно было написано (однако там еще есть требования по требованию памяти и временем исполнения программы). В итоге - 42 балла, ~ 6 место. На PHP знал как решить 2-ую задачу, за которую давали 70 баллов, в итоге мог получить до 112 баллов (с учетом того что первое место среди 11 классов было ~ 90 баллов). Жаль, конечно, хотелось посмотреть, что, да как на всероссийской олимпиаде, но видимо не судьба 
ЗЫ: Кому интересно, могу скинуть олимпиадные задачки. Кстати в конце олимпиады даже выдавали листовки с авторскими решениями. В ступор поставило то, что они все на Java, который в этом году вроде как не является разрешенным языком.
Вот весь мой опыт участия в олимпиадах
Проходила региональная олимпиада с 29.01.2008 по 31.01.2008 (1 день - заселение, пробный тур; 2 день - олимпиада; 3 день - оглашение результатов, разбор задач, награждение). Организация региональной олимпиады очень понравилась 
Мне было тяжко. О C я до того момента только читал. Мной были как-то написаны программы для перевода градусов из цельсия в фаренгейта на чистом C (Пример из книги Д. Риччи) и программа Hello World. А ведь без практики никуда. Пришел в гостиницу (нас жило 6 чел в комнате: me, 2 basic, 1 pascal, 2 C++). Попросил челов, которые кодят на С++ объясняить, как работать с входными и выходными файлами. Больше никакой подготовки не было
ЗЫ: Кому интересно, могу скинуть олимпиадные задачки. Кстати в конце олимпиады даже выдавали листовки с авторскими решениями. В ступор поставило то, что они все на Java, который в этом году вроде как не является разрешенным языком.
Вот весь мой опыт участия в олимпиадах
-
SpeedHack
- Сообщения: 116
Re: Олимпиады
ЗЫ: На третий день олимпиады пошел в книгомир и купил очередную книжку по C++ (Герберт Шилдт, С++ базовый курс), очень нравится, первые 3 главы позади
О том что съездил на олимпиаду - ничуть не жалею. Она даже послужила поводом еще раз попробовать изучить С++
Ибо первый раз, когда я его хотел изучуть, ИМХО мне попалась плохая книжка (Липпман, С++), в которой уже во 2 гладе говориться об ООП. Прочитав 150 страниц и ничего не поняв, я на нее забил. Возможно, еще открою после прочтения этой.
ЗЫ2: Чтобы участвовать в олимпиадах, нужно уметь думать на каком-либо языке (как уже писали выше). Нужно вникнуть в содержание задачи, представить себе ее решение, разбить по этапам и реализовать это решение на языке.
Кстати, тем кто только планирует участвовать в олимпиадах, рекомендую учить именно C++. Этот язык гарантированно везде разрешен, обладает огромными возможностями, гибкостью и при решении вам меньше других придется задумываться о времени выполения программы и о колически используемой памяти.
ЗЫ2: Чтобы участвовать в олимпиадах, нужно уметь думать на каком-либо языке (как уже писали выше). Нужно вникнуть в содержание задачи, представить себе ее решение, разбить по этапам и реализовать это решение на языке.
Кстати, тем кто только планирует участвовать в олимпиадах, рекомендую учить именно C++. Этот язык гарантированно везде разрешен, обладает огромными возможностями, гибкостью и при решении вам меньше других придется задумываться о времени выполения программы и о колически используемой памяти.
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: Олимпиады
По поводу алгоритмов повторюсь: вы действительно забудете 90% алгоритмов, которые изучили для олимпиад, за ненадобностью. Но останется умение выбрать нужный. Даже в википедии надо знать, в какой раздел смотреть.
По поводу "думать на языке" - это хорошо, для кодера-олимпийца - очень хорошо. Но в реальной работе это - только первый этап. Следующая ступень - умение подобрать язык (и парадигму программирования) под задачу. "Выучить язык" на этом этапе - техническое затруднение на пару дней.
Про человека, изучающего С прямо на контесте я лично наблюдал историю в команде, в которой был тренером. Ща расскажу:
Нам не хватало третьего человека в команду. Точнее, третий у нас был, но за пару дней до контеста исчез - уехал к родным, как потом выяснилось. И мы взяли друга одного из участников, который никогда в олимпиадах не участвовал, знал только Паскаль (остальные собирались писать на С), но вроде как толковый. А ехали мы на программерские сборы в Перми. Это 6 дней, каждый день по контесту в формате ACM ICPC - подготовка к полуфиналу.
В первый день "новенький" только глазел на остальных (С он просто в первый раз видел), да давал советы по алгоритмам. Но уже на третий день он во всю кодил на С, а на 6-й стал "заместителем главного кодера" команды. Сейчас он пишет в основном на С, Паскаль недолюбливает
Про язык - думаю, начинать (для олимпиад) стоит с С либо с Паскаля. С++ можно отложить на потом - авось, и вовсе не понадобятся все его заморочки
По поводу "думать на языке" - это хорошо, для кодера-олимпийца - очень хорошо. Но в реальной работе это - только первый этап. Следующая ступень - умение подобрать язык (и парадигму программирования) под задачу. "Выучить язык" на этом этапе - техническое затруднение на пару дней.
Про человека, изучающего С прямо на контесте я лично наблюдал историю в команде, в которой был тренером. Ща расскажу:
Нам не хватало третьего человека в команду. Точнее, третий у нас был, но за пару дней до контеста исчез - уехал к родным, как потом выяснилось. И мы взяли друга одного из участников, который никогда в олимпиадах не участвовал, знал только Паскаль (остальные собирались писать на С), но вроде как толковый. А ехали мы на программерские сборы в Перми. Это 6 дней, каждый день по контесту в формате ACM ICPC - подготовка к полуфиналу.
В первый день "новенький" только глазел на остальных (С он просто в первый раз видел), да давал советы по алгоритмам. Но уже на третий день он во всю кодил на С, а на 6-й стал "заместителем главного кодера" команды. Сейчас он пишет в основном на С, Паскаль недолюбливает
Про язык - думаю, начинать (для олимпиад) стоит с С либо с Паскаля. С++ можно отложить на потом - авось, и вовсе не понадобятся все его заморочки
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
SpeedHack
- Сообщения: 116
Re: Олимпиады
По поводу алгоритмов повторюсь: вы действительно забудете 90% алгоритмов, которые изучили для олимпиад, за ненадобностью. Но останется умение выбрать нужный. Даже в википедии надо знать, в какой раздел смотреть.
По мне так - решение задач сводится не к реализации уже давно выведенных алгоритмов, а к их придумыванию. Если человек отлично владеет языком (ИМХО), то 80% сложности - это написание качественного алгоритма, с помощью которого ваша программа будет укладываться во время и результаты будут соответственно положительными. Если знаешь язык, то реализация алгоритма по сравнению с его обдумыванием занимает намного меньше времени.
Напр. алгоритм Евклеида (Найти НОД двух чисел) - это был пробный тур олимпиады. Ботаны, которые его знали - чморили других за его незнание, хотя по результатам олимпиады многие из них оказались в полной жопе (ибо на те задачи не было готовых алгоритмов, нужно было придумывать свои).
Выучить язык" на этом этапе - техническое затруднение на пару дней.
Язык можно выучить за неделю, но это будет "грубое программирование". Многих тонкостей человек знать не будет, будет каждый раз пытаться изобретать велосипеды и т.д. и т.п. Это ИМХО.
Про человека, изучающего С прямо на контесте я лично наблюдал историю в команде, в которой был тренером. Ща расскажу:
Нам не хватало третьего человека в команду. Точнее, третий у нас был, но за пару дней до контеста исчез - уехал к родным, как потом выяснилось. И мы взяли друга одного из участников, который никогда в олимпиадах не участвовал, знал только Паскаль (остальные собирались писать на С), но вроде как толковый. А ехали мы на программерские сборы в Перми. Это 6 дней, каждый день по контесту в формате ACM ICPC - подготовка к полуфиналу.
В первый день "новенький" только глазел на остальных (С он просто в первый раз видел), да давал советы по алгоритмам. Но уже на третий день он во всю кодил на С, а на 6-й стал "заместителем главного кодера" команды. Сейчас он пишет в основном на С, Паскаль недолюбливает
Если человек знает на отлично какой-либо язык, то последующие легко поддаются изучению
Про язык - думаю, начинать (для олимпиад) стоит с С либо с Паскаля. С++ можно отложить на потом - авось, и вовсе не понадобятся все его заморочки
Смысл использовать чистый Си, если С++ в 95% случаев олимпиадного программирования практически ничем не отличается. В нем просто есть поддержка ООП и некоторых новых библиотек, как я понимаю. Здесь лишь один плюс будет - чистый си теоретически должен немного быстрее работать, хотя это в 90% не поможет, ибо хороший алгоритм отработает на С++ менее чем за 1/4 предоставленного времени, а если алгоритм тупой (а-ля вложенный цикл), то никакой чистый си вашу программу не спасет.
Я недостаточно знаком с C и C++, чтобы их сравнивать, но судя по всему в C++ больше библиотечных функций, которые могут облегчить написание программы на олимпиаде. Сам ООП в олимпиадах не используется, ибо задачи крохотные. Даже на Java 200 строк кода - это крыша для решения любой стандартной задачи.
-
wzrd
- Сообщения: 323
- ОС: Debian Lenny
Re: Олимпиады
может будем выкладывать задачки (только не в в архивах, а прямо в форум и желательно сокрашать их и не писать про то как вася (или петя) жил и сколько ему было лет и т.п.). вот задача с последней республиканской олимпиады которую я оешил но не полностью.
Даны числа a, b, c. Определить возможно ли путем перестановки цифр в числах a и b получить a+b=c. Если да то вывести нужные числа, в противном случае вывести NO.
Например: a=32; b=2; c=25; Должно выдать
YES
23 2
Даны числа a, b, c. Определить возможно ли путем перестановки цифр в числах a и b получить a+b=c. Если да то вывести нужные числа, в противном случае вывести NO.
Например: a=32; b=2; c=25; Должно выдать
YES
23 2
-
wzrd
- Сообщения: 323
- ОС: Debian Lenny
Re: Олимпиады
SpeedHack
не согласен что многие алгоритмы легче придумывать самому. есть задачи которые без знания алгоритма не решить (по крайней мере во время олимпиады). привести пример?
не согласен что многие алгоритмы легче придумывать самому. есть задачи которые без знания алгоритма не решить (по крайней мере во время олимпиады). привести пример?
-
Фантом
- Сообщения: 463
- ОС: openSUSE
-
wzrd
- Сообщения: 323
- ОС: Debian Lenny
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: Олимпиады
Задача не до конца сформулирована просто. К олимпиадным задачам прилагаются ограничения по времени и по памяти, а также на входные данные. Ну например:
0 <= a,b,c, <= 1000000
Время выполнения: 2с на Celeron 1MHz
Память: 64Мб
(цифры я взял от балды, не уверен сейчас что эта задача за такое время решается).
Так что вопрос к жюри
: уточните, плиз, ограничения к задаче.
Ну и кому интересны конкретные задачи - go to http://acm.timus.ru .
0 <= a,b,c, <= 1000000
Время выполнения: 2с на Celeron 1MHz
Память: 64Мб
(цифры я взял от балды, не уверен сейчас что эта задача за такое время решается).
Так что вопрос к жюри
Ну и кому интересны конкретные задачи - go to http://acm.timus.ru .
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
wzrd
- Сообщения: 323
- ОС: Debian Lenny
Re: Олимпиады
0<a,b,c<=1000000000
2 сек. intel pentium 3000 MHz
64 мб.
P.S. Portnov эта система ejudje была на всероссийской интернет олимпиаде на olympiads.ru, если я не ошибаюсь. у меня даже исходники где то были. кстати не знаете ли вы ничего о ее стойкости и стабильности? неужели она так хороша что ей доверяют судить на таких олимпиадах?
2 сек. intel pentium 3000 MHz
64 мб.
P.S. Portnov эта система ejudje была на всероссийской интернет олимпиаде на olympiads.ru, если я не ошибаюсь. у меня даже исходники где то были. кстати не знаете ли вы ничего о ее стойкости и стабильности? неужели она так хороша что ей доверяют судить на таких олимпиадах?
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: Олимпиады
Да, это давно испытанная и отлаженная система, благо исходники открыты, по крайней мере в России ее применяют почти на всех олимпиадах, включая, кажется, и этапы ACM ICPC (тут не уверен, возможно проверяет там какая-то другая система, а в ejudge уже готовые результаты загоняются). На больших олимпиадах она применяется, естественно, в комплекте с какой-нибудь системой виртуализации (типа openvz), с тем чтобы "юные хакеры" не могли своими "решениями" "уронить" сервер или еще чего начудить.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
wzrd
- Сообщения: 323
- ОС: Debian Lenny
-
Фантом
- Сообщения: 463
- ОС: openSUSE
Re: Олимпиады
Да нет, очевидно, что совсем без перебора не обойтись. Правда, очевидны и некоторые способы его оптимизации (ну, например, можно, переставляя цифры меньшего числа в произвольном порядке, подбирать, начиная от младших разрядов к старшим, цифры второго числа так, чтобы получать нужную сумму). Можно интереса ради вставить несколько отсеивающих тестов (например, если максимум из a и b в 10 раз меньше c, то ответ отрицателен; или сумма цифр a и b не совпадает с суммой цифр c, то тоже отрицателен).
Вопрос лишь в том, что конкретно надо получить. Для оптимизации обработки большого числа наборов (a,b,c) простые тесты необходимы, для оптимизации наихудшего возможного (по времени) результата они вредны. Если оптимизировать надо время, вообще затраченное на получение ответа, то, возможно, совсем тупой перебор (с перестановками цифр и в a, и в b) будет быстрее. Ну и т.д. Так что, как уже писали выше, задача недоопределена, даже с учетом этой добавки:
...надо бы уточнить, 2 с - это граница для любого одиночного результата или для среднего по многим?
Это, кстати, один из "минусов" олимпиад по программированию - о таких вариантах постановки задачи никто не думает, а в реальной жизни они более чем типичны.
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: Олимпиады
Фантом, на олимпиадах ограничение по времени дается для одного любого теста, т.е. на любых входных данных программа должна работать меньше 2с.
Тесты участинкам предоставляются разве что после подведения итогов, и то - по решению жюри.
Тесты участинкам предоставляются разве что после подведения итогов, и то - по решению жюри.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
wzrd
- Сообщения: 323
- ОС: Debian Lenny
-
SpeedHack
- Сообщения: 116
Re: Олимпиады
И проверяется это все спец. системой, которую кстати можно вроде бы скачать с http://olympiads.ru. Вообще это очень интересный сайтик. Но обнаружил я его только вчера
Там расписаны правила участия в олимпиаде, рекомендуемые / разрешеные языки программирования.
http://olympiads.ru/moscow/2007/och/info.shtml
Так же там же можно найти правила участия в командной олимпиаде.
На счет алгоритмов - я считаю, что задачи должны решаться на основе продумывания своего алгоритма, а не использования готового. Это позволяет проверить способности участника, а не его знания в области готовых алгоритмов. Ибо можно знать наизусть все алгоритмы и их реализацию на языке программирования, но быть абсолютно неспособным придумывать свои.
Update: http://olympiads.ru/sng/index.shtml - желательно ознакомиться со всем материалом до участия в олимпиаде, думаю может избежать некоторых неприятностей
На туре каждому участнику будет предоставлен компьютер с операционной системой Windows, установленной файловой оболочкой FAR и следующими средами программирования:
Borland Pascal 7.0 (жюри не гарантирует, что все задачи олимпиады можно решить, используя возможности, предоставляемые этим компилятором)
Borland C/C++ 3.1 (жюри не гарантирует, что все задачи олимпиады можно решить, используя возможности, предоставляемые этим компилятором)
QBasic 4.5 (жюри не гарантирует, что все задачи олимпиады можно решить, используя возможности, предоставляемые этим компилятором)
Free Pascal 2.0.2
Компилятор GNU C/C++ и среда MinGWStudio 2.0.5
Компилятор GNU C/C++ и среда Dev C++ 5
Компилятор GNU C/C++ и среда Code::Blocks (MinGW-5.1.3, gdb-6.3.2)
Java: J2SE Development Kit 5.0 и среда Eclipse sdk 3.2.1
Delphi 6
Visual C++ 2005 Express Edition (данная среда установлена только для использования ее в процессе разработки программ, решения на Visual C++ проверяться не будут, их нужно будет адаптировать под GNU C++ и сдать как решения на GNU C++)
Visual Basic Express 2005 Express Edition (использование этого языка программирования разрешается в виде исключения - участникам, решающим задачи на этом языке не будет предоставлен сервис проверки своих решений на тестах из условия под тестирующей системой во время тура, а также им не будут доступны полные протоколы проверки их решений после окончания тура).
Продолжительность тура на олимпиаде 7-9 классов - 4 часа, на олимпиаде 10-11 классов - 4,5 часа. Во время тура участнику будет доступна возможность проверить свое решение под тестирующей системой на тестах из условия (участникам, которые не принимали участия в заочном туре, мы настоятельно рекомендуем заранее познакомиться с тестирующей системой, например, приняв участие в дистанционных семинарах по подготовке к олимпиадам). На проверку по каждой задаче сдается один вариант ее решения, который проверяется после окончания тура.
Во время тура участники могут пользоваться любой литературой, личными записями. Запрещается пользоваться носителями информации в электронном виде, мобильными телефонами и любыми другими электронными устройствами.
http://olympiads.ru/moscow/2007/och/info.shtml
Так же там же можно найти правила участия в командной олимпиаде.
На счет алгоритмов - я считаю, что задачи должны решаться на основе продумывания своего алгоритма, а не использования готового. Это позволяет проверить способности участника, а не его знания в области готовых алгоритмов. Ибо можно знать наизусть все алгоритмы и их реализацию на языке программирования, но быть абсолютно неспособным придумывать свои.
Update: http://olympiads.ru/sng/index.shtml - желательно ознакомиться со всем материалом до участия в олимпиаде, думаю может избежать некоторых неприятностей
-
wzrd
- Сообщения: 323
- ОС: Debian Lenny
Re: Олимпиады
SpeedHack, то что ты говоришь бывает на начальных этапах олимиад (шкоьные, районные). если каждый алгоритм придумывать самому то на это можно половину своей жизни потратить и не факт что он будет самым крутым, и плюс еще никому не нужный велосипед будешь изобретать... знание алгоритма это не значит знания решения задачачи. во первых его нужно увидеть и правильно скомбинировать с другими алгоритмами. задачи на изобретение своего алгоритма это отдельные задачи и подход к ним совершенно другой, хотя бывает что нужно бывает не только придумать свой алгоритм но и правильно подставит в него другой, уже "готовый" алгоритм.
-
SpeedHack
- Сообщения: 116
Re: Олимпиады
SpeedHack, то что ты говоришь бывает на начальных этапах олимиад (шкоьные, районные). если каждый алгоритм придумывать самому то на это можно половину своей жизни потратить и не факт что он будет самым крутым, и плюс еще никому не нужный велосипед будешь изобретать...
На олимпиадах дают не настолько сложные задачи, чтобы к ним придумывать алгоритм нужны было годами.
Бывает, что можно готовый алгоритм, который используется совершенно в другой области, портировать под свою задачу, но такое бывает не часто, как я заметил.
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: Олимпиады
Чаще все-таки приходится использовать готовый алгоритм. Ну вот пример довольно банальной задачи (ее вариант или усложнение бывает чуть ли не на каждом четвертьфинале):
Есть сеть водопровода - соединенные между собой трубы. Трубы могут соединяться по 2,3,... по сколько угодно. Все стыки и все трубы пронумерованы. У каждой трубы есть пропускная способность - максимальное количество воды в литрах, которое может пройти через эту трубу за 1 секунду. Один из стыков называется истоком, другой - стоком. Во входном файле input.txt первой строкой число стыков N число труб M, номер стыка-истока A и номер стыка-стока B, через пробел. Далее идет M строк, каждая содержит по четыре числа: номер трубы, номер стыка с одним концом трубы, номер стыка с другим концом, и пропускная способность этой трубы.
Нужно найти максимальную пропускную способность всего трубопровода, т.е. максимальное количество воды, которое может пройти за единицу времени от истока к стоку (совсем не факт, что при этом все трубы будут загружены до отказа). В выходном файле output.txt должна первой строкой быть указана вычисленная пропускная способность, дальше должно идти M строк, указывающих сколько пропускной способности каждой трубы использовано.
Если к этой задаче придумывать алгоритм с нуля, просидите все 5 часов контеста и ничего путевого не придумаете. Зато если знать в общих чертах теорию графов и хотя бы алгоритм Форда-Фалкерсона - задача решается за час.
Кстати, кой-какие ссылки: http://del.icio.us/portnov/olimp.
Есть сеть водопровода - соединенные между собой трубы. Трубы могут соединяться по 2,3,... по сколько угодно. Все стыки и все трубы пронумерованы. У каждой трубы есть пропускная способность - максимальное количество воды в литрах, которое может пройти через эту трубу за 1 секунду. Один из стыков называется истоком, другой - стоком. Во входном файле input.txt первой строкой число стыков N число труб M, номер стыка-истока A и номер стыка-стока B, через пробел. Далее идет M строк, каждая содержит по четыре числа: номер трубы, номер стыка с одним концом трубы, номер стыка с другим концом, и пропускная способность этой трубы.
Нужно найти максимальную пропускную способность всего трубопровода, т.е. максимальное количество воды, которое может пройти за единицу времени от истока к стоку (совсем не факт, что при этом все трубы будут загружены до отказа). В выходном файле output.txt должна первой строкой быть указана вычисленная пропускная способность, дальше должно идти M строк, указывающих сколько пропускной способности каждой трубы использовано.
Если к этой задаче придумывать алгоритм с нуля, просидите все 5 часов контеста и ничего путевого не придумаете. Зато если знать в общих чертах теорию графов и хотя бы алгоритм Форда-Фалкерсона - задача решается за час.
Кстати, кой-какие ссылки: http://del.icio.us/portnov/olimp.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
netguard
- Сообщения: 30
Re: Олимпиады
1-ый вариант лучше. Готовые алгоритмы очень полезно самому реализовать, для того чтобы знать как, а вот далее ... далее только свой мозг и опыт, т.к. ни один из готовых алгоритмов на 99% не подойдет для поставленной задачи. В оставшимся 1% проценте, в С++ например помогает std::sort.
Все таки главное логическое мышление, а по поводу грамотно не грамотно сформулировать задачу, это конечно надо уметь, но вообщем то этим занимаются те кто составляет ТЗ, и приводимые задачи на олимпиадах по сравнению с реальными на самом деле имеют очень мало общего. Опыт составления ТЗ олимпиадного вряд ли поможет, поскольку реальное ТЗ, в реальных проектах в разы сложнее и делается оно не за 20-30 минут, а неделями, а то и месяцами.
Portnov
Твоя задача идеально демонстрирует олимпиаду ... только не программистов, а математиков. Grekhem R. Knut D. PatashnikO. - Конкретная математика, вот здесь приведены задачи для программистов, знание которые может пригодится при решении любых других. А вот эти извиняюсь подобные графы с теоремами нужны ученым наверное только, чтобы составить формулы, которые уже программист будет реализовывать, поскольку данных 2 профессии требуют значительных умственных затрат и я сомневаюсь что в мире есть хотя бы один программист-ученый или ученый-программист. Каждый должен заниматся своим делом, то которое может лучше всего, и тогда все выйграют и в качестве, и в надежности и в производительности.
Все таки главное логическое мышление, а по поводу грамотно не грамотно сформулировать задачу, это конечно надо уметь, но вообщем то этим занимаются те кто составляет ТЗ, и приводимые задачи на олимпиадах по сравнению с реальными на самом деле имеют очень мало общего. Опыт составления ТЗ олимпиадного вряд ли поможет, поскольку реальное ТЗ, в реальных проектах в разы сложнее и делается оно не за 20-30 минут, а неделями, а то и месяцами.
Portnov
Твоя задача идеально демонстрирует олимпиаду ... только не программистов, а математиков. Grekhem R. Knut D. PatashnikO. - Конкретная математика, вот здесь приведены задачи для программистов, знание которые может пригодится при решении любых других. А вот эти извиняюсь подобные графы с теоремами нужны ученым наверное только, чтобы составить формулы, которые уже программист будет реализовывать, поскольку данных 2 профессии требуют значительных умственных затрат и я сомневаюсь что в мире есть хотя бы один программист-ученый или ученый-программист. Каждый должен заниматся своим делом, то которое может лучше всего, и тогда все выйграют и в качестве, и в надежности и в производительности.