Разное

Яндекс алгоритм 2019: Алгоритм — Yandex Cup

26.11.1993

Компания Яндекс — Главные новости — Яндекс запустил новую версию поиска — «Вега»

Интернет, 17 декабря 2019 года. Яндекс представил «Вегу» — большое поисковое обновление. Теперь Яндекс точнее и быстрее отвечает на запросы, а также учитывает сигналы от асессоров-экспертов при обучении поискового алгоритма. Люди могут решать с помощью Яндекса гиперлокальные задачи — находить нужное в конкретном микрорайоне, квартале или даже доме. «Вега» объединяет более полутора тысяч улучшений, добавленных в поиск за последний год.

«Сегодняшнее обновление — итог работы большой команды в течение года. Оно отражает наше видение того, каким должен быть современный поиск: умным, технологичным и готовым помочь в любом месте и в любой ситуации, — говорит руководитель поискового портала Яндекса Андрей Стыскин. — В этом обновлении мы соединили передовые разработки Яндекса — новую систему хранения веб-документов, технологию предзагрузки результатов поиска и множество других решений — с обучением алгоритма с помощью асессоров-экспертов. Пользователи своим выбором подтверждают, что мы на верном пути. Доля поиска Яндекса на всех платформах сейчас составляет 57,9%, а доля на Android — самой популярной в России мобильной ОС — за год выросла на 4,8 процентных пункта и достигла 54,7%».

Улучшения в «Веге» распределяются по четырём ключевым направлениям:

Повышение качества поиска

Яндекс научился составлять поисковую базу с помощью нейросетей — они распределяют документы из базы по «смысловым кластерам». Такой подход даёт выигрыш во времени и вычислительных ресурсах. За счёт высвобождения ресурсов поисковую базу удалось увеличить вдвое. Теперь поиск находит даже страницы, которые могут потребоваться людям 1–2 раза в год.

Мгновенные ответы

В мобильном поиске появилась технология предварительной загрузки результатов поиска (пререндеринг). Она угадывает, каким будет полный текст запроса, в момент, когда человек только набирает первые слова. Технология позволяет сформировать результаты поиска заранее и мгновенно показать их пользователю, когда он нажмёт кнопку «Найти». Это экономит время, особенно при медленном интернете.

Экспертный поиск

Яндекс внедрил новый алгоритм ранжирования и обзавёлся асессорами-экспертами. Каждый такой асессор — профессионал в той или иной области. Например, асессор-гидролог понимает, как объяснить процесс [образования двухэтажных рек], и может квалифицированно оценить, насколько хорошо веб-страницы отвечают на запросы на эту тему. Вердикты асессоров-экспертов — ключевой сигнал для обучения нового алгоритма. Также Яндекс запускает сервис Кью, где учёные, профессионалы и просто разбирающиеся люди отвечают на вопросы пользователей. Оценки асессоров-экспертов и объяснения от специалистов из Кью позволяют получить полный и понятный ответ даже на сложные запросы.

Гиперлокальность

Яндекс обновил сервисы Район и Услуги. В Районе появились чаты, где могут общаться жители одного и того же дома, а Услуги научились показывать предложения услуг на карте. Теперь к Яндексу можно обращаться с задачами, которые раньше решались в основном в офлайне: от поиска сбежавшего кота до вызова на дом сантехника, готового приехать в течение получаса.

Подробнее об улучшениях, которые входят в состав «Веги», читайте в блоге Яндекса: https://yandex.ru/blog/company/vega

Дополнительные материалы — скриншоты, видео и фотографии — доступны на Яндекс.Диске: https://yadi.sk/d/AzXlSJCN502ecg

Контакты
Пресс-служба компании «Яндекс»
Александра Юданова
Тел.: +7 (495) 739 7000
E-mail: [email protected]

Как проходят алгоритмические секции на собеседованиях в Яндекс / Хабр

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

Так что мы подготовили для вас следующие материалы:


  • Специальный контест, содержащий задачи, похожие на те, что мы даём на интервью.
  • Этот пост. В нём рассказывается, почему нужно проводить такие секции, а также разбираются все задачи контеста.
  • Два видео, в которых разбираются задачи из контеста: в первом — задача попроще, во втором — две задачи посложнее. Из этих видео вы узнаете о типичных ошибках, допускаемых и при прохождении алгоритмических секций, и при написании продакшен-кода.

Как мы собеседуем разработчиков

Собеседование любого разработчика состоит из нескольких этапов:


  • предварительная секция с рекрутером;
  • техническое скайп-интервью;
  • несколько очных секций;
  • финальные интервью с нанимающими менеджерами.

На предварительной секции рекрутер знакомится с кандидатом, узнаёт его интересы и мотивы для того, чтобы понять, на какие позиции имеет смысл его рассматривать. Техническое скайп-интервью предназначено для предварительной оценки навыков кандидата и отсеивает тех, кто со всей определённостью не справится с очными секциями.

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

Алгоритмическая секция проверяет, способен ли кандидат придумывать алгоритмы для решения несложных задач, оценивать сложность этих алгоритмов и реализации их без ошибок, в процессе соблюдая баланс между качеством тестирования и скоростью решения.


Зачем писать код на доске или бумаге

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

Первое из них — умение быстро разбираться с работоспособностью кода «на глаз». Представьте себе, что при написании каждого цикла, возникающего в программе, разработчику требуется потратить время на то, чтобы проверить его работоспособность трассировкой; или что при падении сервиса в продакшене ему всегда обязательно нужно запустить код под дебаггером. Ясно, что написание и отладка даже несложных программ будут занимать у него непозволительно много времени. Конечно, полезно уметь читать код и при код-ревью.

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

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


Алгоритмические секции и спортивное программирование

Спортивное программирование развивает в будущем разработчике, помимо прочего, и способность быстро и без ошибок реализовывать простые алгоритмы согласно заранее назначенному плану. Поэтому кандидаты с опытом спортивного программирования, действительно, неплохо справляются с алгоритмическими секциями на собеседованиях. Часто можно наблюдать ситуацию, когда будущие стажёры легко справляются с алгоритмической секцией, решая все задачи за 15-20 минут, тогда как более опытные программисты на те же задачи тратят целый час.

В то же время, алгоритмическая секция с написанием кода — лишь одна из секций, проверяющая минимально необходимые для любого разработчика навыки. С этой секцией справятся не только олимпиадные программисты, но и опытные промышленные разработчики. Будущего старшего разработчика или руководителя группы обязательно ждёт архитектурная секция, на которой он сможет раскрыть свои самые сильные стороны; конечно, эта секция никогда не ставится стажёрам и младшим разработчикам.


Контест для подготовки к собеседованию

Специально для того, чтобы вы могли примерно представить себе содержание задач, которые мы даём на алгоритмических секциях, мы собрали контест, который можно использовать при подготовке к собеседованиям. Попробуйте решить все задачи, ни разу не запустив дебаггер; написать решение в Notepad’е без подсветки синтаксиса; придумать как можно более короткое решение, которые пройдёт все тесты; продумать все возможные проблемы заранее и сдать решение с первого раза.

Контест содержит пять задач. Вы можете попробовать решить их самостоятельно, а можете заранее прочитать разбор: это всё равно будет полезно, т. к. вы сможете потренировать свой навык безошибочного кодирования заранее известного алгоритма.


Разбор задач контеста

Задача A. Камни и украшения


Даны две строки строчных латинских символов: строка J и строка S. Символы, входящие в строку J, — «драгоценности», входящие в строку S — «камни». Нужно определить, какое количество символов из S одновременно являются «драгоценностями». Проще говоря, нужно проверить, какое количество символов из S входит в J.

Это очень простая разминочная задача, к которой прилагаются решения на нескольких языках программирования, чтобы участники могли освоиться с проверяющей системой.

Алгоритм достаточно простой: из строки с «драгоценностями» необходимо построить множество, затем пройтись по строке с «камнями» и каждый символ проверить на вхождение в это множество. Используйте такую реализацию множества, чтобы гарантировать линейную сложность полученного решения, несмотря на то, что входные строки очень короткие и поэтому возможно сдать даже квадратичный по сложности алгоритм.

Задача B. Последовательно идущие единицы


Требуется найти в бинарном векторе самую длинную последовательность единиц и вывести её длину.

Алгоритм решения следующий: пройтись по всем элементам массива; встретив единицу, нужно увеличить счётчик длины текущей последовательности, а, встретив ноль, нужно обнулить этот счётчик. В конце нужно вывести максимальное из значений, которые принимал счётчик.

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

Постарайтесь использовать лишь константный объём дополнительной памяти.

Задача C. Удаление дубликатов


Дан упорядоченный по неубыванию массив целых 32-разрядных чисел. Требуется удалить из него все повторения.

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

При решении этой задачи также не нужно использовать дополнительную память.

Задача D. Генерация скобочных последовательностей


Дано целое число . Требуется вывести все правильные скобочные последовательности длины , упорядоченные лексикографически (см. https://ru.wikipedia.org/wiki/Лексикографический_порядок). В задаче используются только круглые скобки.

Это пример относительно сложной алгоритмической задачи. Будем генерировать последовательность по одному символу; в каждый момент мы можем к текущей последовательности приписать либо открывающую скобку, либо закрывающую. Открывающую скобку можно дописать, если до этого было добавлено менее n открывающих скобок, а закрывающую — если в текущей последовательности количество открывающих скобок превосходит количество закрывающих. Такой алгоритм при аккуратной реализации автоматически гарантирует лексикографический порядок в ответе; работает за время, пропорциональное произведению количества элементов в ответе на n; при этом требует линейное количество дополнительной памяти.

Примером неэффективного алгоритма был бы следующий: сгенерируем все возможные скобочные последовательности, а затем выведем лишь те из них, что окажутся правильными. При этом объём ответа не позволит решить задачу быстрее, чем тот алгоритм, что приведёт выше.

Задача E. Анаграммы

Эта достаточно простая задача — типичный пример задачи, для решения которой необходимо использовать ассоциативные массивы. При решении нужно учитывать, что символы могут повторяться, поэтому необходимо использовать не множества, а словари. Поэтому решение будет следующим: составим из каждой строки по словарю, который для каждого символа будет хранить количество его повторений; затем сравним получившиеся словари. Если они совпадают, необходимо вывести единицу, в противном случае — ноль.

Альтернативное решение: отсортируем входные строки, а затем сравним их. Это решение хуже в том, что оно работает медленнее, а также меняет входные данные. Зато такое решение не использует дополнительной памяти.

Если в процессе собеседования у вас возникло несколько вариантов решения, отличающихся своими по своим характеристикам, расскажите об этом. Всегда здорово, когда разработчик знает несколько вариантов решения задачи и может рассказать об их сильных и слабых сторонах.

Задача F. Слияние сортированных списков


Даны отсортированных в порядке неубывания массивов неотрицательных целых чисел, каждое из которых не превосходит 100. Требуется построить результат их слияния: отсортированный в порядке неубывания массив, содержащий все элементы исходных массивов. Длина каждого массива не превосходит .

Для каждого массива создадим по указателю; изначально каждый указатель расположен в начале соответствующего массива. Элементы, соответствующие позициям указателей, поместим в любую структуру данных, которая поддерживает извлечение минимума — это может быть мультимножество или, например, куча. Далее будем извлекать из этой структуры минимальный элемент, помещать его в ответ, сдвигать позицию указателя в соответствующем массиве и помещать в структуру данных очередной элемент из этого массива.

В этой задаче многие испытывают сложности с форматом ввода. Обратите внимание на то, что первые элементы строк не описывают элементы массивов, они описывают длины массивов!


FAQ по контесту

A: Я точно написал правильный код, но тесты не проходят; наверное, в них ошибка?
Q: Нет, все тесты правильные. Подумайте: вероятно, вы не предусмотрели какую-нибудь необычную ситуацию.

A: Я пишу на языке X, ему точно требуется больше памяти в задаче Y. Поднимите лимиты!
Q: Все лимиты выставлены таким образом, что решение возможно с использованием любого из доступных языков. Попробуйте проверить, не зачитываете ли вы случайно входной файл целиком в задачах со строгими лимитами по используемой памяти.

A: Некоторые задачи можно решить намного проще из-за указанных ограничений. Зачем вы так?
Q: Мы специально упростили ввод в некоторых задачах, чтобы участникам было проще сосредоточиться на реализации алгоритма и не думать, например, о скорости загрузки данных или каких-то других вещах, важных в спортивном программировании. Постарайтесь реализовать именно те алгоритмы, которые мы рекомендуем — только в такой ситуации вы получите от контеста максимальную пользу.

A: Не хочу проходить контест. Можно я не буду?
Q: Конечно! Контест не является обязательным к решению всеми кандидатами. Впрочем, я всё равно рекомендую его порешать: это в любом случае будет полезно.

A: Что ещё посоветуете для подготовки?
Q: Прочитайте наши советы на официальной странице про собеседования в Яндекс: https://yandex.ru/jobs/ya-interview. От себя добавлю, что решение задачек на leetcode.com является крайне полезным для любого практикующего разработчика, независимо от того, планирует ли он в ближайшее время проходить интервью или участвовать в соревнованиях по программированию. Даже небольшое количество практики позволяет почувствовать себя увереннее при решении рабочих задач.


Заключение

Я часто бываю на конференциях для разработчиков и руководителей разработки, состою во многих чатах, посвящённых разработке, провёл несколько сотен собеседований и нанял в Яндекс огромное количество разработчиков. Опыт подсказывает, что алгоритмические секции с написанием кода на доске или бумаге часто вызывают вопросы. В заключение статьи я отвечу на самые популярные из них.

Зачем проводить собеседование в условиях, столь сильно отличающихся от реальных условий работы разработчика?
Это позволяет понять, способен ли кандидат находить проблемы в программах, не запуская дебаггер; может ли он заранее придумать план алгоритма и затем безошибочно следовать ему; может ли он придумать небольшой, но достаточный, набор тестов и затем проверить свою реализацию на соответствие этому набору тестов.

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

Зачем проводить алгоритмические секции, если все алгоритмы уже давно реализованы, и нужно лишь уметь искать их реализации в готовых библиотеках?
На алгоритмических секциях, общих для всех разработчиков, мы проверяем лишь минимально необходимые навыки: умение придумать и без ошибок реализовать простой алгоритм, содержащий циклы, проверки условий и, возможно, требующий использования ассоциативных массивов. Код такого типа постоянно приходится писать для реализации пользовательских сервисов.

Какой смысл в секции, которая не проверяет огромное количество навыков разработчика?


Алгоритмическая секция, действительно, проверяет лишь минимально необходимый для любого разработчика набор навыков. Другие навыки мы проверяем при помощи других секций.

Вы проводите алгоритмические секции для разработчиков всех специальностей?
Да. Алгоритмические секции проводятся для бекенд-разработчиков, аналитиков, мобильных и фронтенд-разработчиков, разработчиков инфраструктуры и методов машинного обучения, и так далее.

Сводка обновлений алгоритма Яндекса за 2019 год

Сводку обновлений алгоритма Яндекса за 2020 год можно найти здесь. Эта статья охватывает только 2019 год.

Основываясь на стороннем мониторинге наборов данных ключевых слов по ряду категорий и регионов в Яндексе, мы можем установить показатель волатильности — аналогичный трекерам волатильности SERP, которые используются для Google.

В разбивке основные категории отслеживаемых ключевых слов и поисковой выдачи:

  • Автомобилестроение
  • Юридические услуги
  • Электронные и бытовые приборы
  • Недвижимость
  • Промышленное и торговое оборудование
  • Мебель для дома
  • Страхование
  • Товары для дома, строительные материалы и инструменты
  • Человеческая логистика (аренда автомобилей и т. д.)
  • Онлайн-игры
  • Путешествия и туризм
  • Красота и здоровье
  • Финансовый
  • Одежда и аксессуары

Основываясь на отслеживании этих категорий, наборов ключевых слов и изменений в поисковой выдаче, дни с самым высоким уровнем волатильности в 2019 году, когда наиболее вероятно обновление алгоритма, были:

  • 17
  • 18
  • 22-й
  • В январе было четыре всплеска «выше среднего» в середине месяца, в то время как в остальном период был относительно беспрецедентным.

    Февраль

    • 1-й (потенциально)
    • 7-й

    Помимо двух высоких всплесков в начале месяца, также наблюдалось увеличение активности с 23 по 28 число, что привело к всплеску активности 1 марта.

    Март

    • 1-й
    • 2-й
    • 26

    Стоит отметить, что после 26 марта активность была выше средней, но снижалась после всплеска.

    апрель

    • 9

    Апрель был относительно активным месяцем для обновлений алгоритма Яндекса, причем 9-е число стало выдающимся всплеском среди изменений.

    Май

    • 22-е
    • 28

    Всплески 22 и 28 мая были яркими событиями месяца, но меньшими с точки зрения всплесков волатильности поисковой выдачи, наблюдавшихся в предыдущие месяцы. В целом май был относительно спокойным месяцем для изменений алгоритмов по сравнению с предыдущим кварталом.

    июнь

    • 4-й

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

    После обновления от 4 июня некоторая активность была зарегистрирована в период с 18 по 21 июня, но месяц был более спокойным и менее изменчивым, чем май.

    Июль

    Июль был спокойным месяцем, ничего не регистрировалось, кроме ежедневной алгоритмической рутины.

    Август

    Август, как и июль, был тихим. 30 и 31 августа было два небольших всплеска.

    30 августа более изменчивыми категориями были недвижимость и товары для дома, а 31 августа более изменчивыми категориями были финансовые и кадровая логистика (аренда автомобилей и т. д.).

    Сентябрь

    • 17
    • 23
    • 26

    Первая половина сентября была относительно спокойной, как и август, однако во второй половине месяца наблюдалась повышенная волатильность с более сильными всплесками 17, 23 и 26 числа, при этом все категории показали различный уровень повышенной активности.

    Октябрь

    • 1-й
    • 3-й
    • 4-й
    • 5-й
    • 6-й

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

    ноябрь

    • 2-й

    Во втором ноябре наблюдался единственный всплеск активности за месяц, при этом основными категориями, демонстрирующими повышенную волатильность, были Здоровье и Красота (в Московской области и Алматинской области), Веб-услуги (в Санкт-Петербурге) и Логистика персонала (в Киеве). область, край).

    Декабрь

    Декабрь был относительно спокойным месяцем, без серьезных всплесков, несмотря на объявление об обновлении Vega, поэтому можно предположить, что любые серьезные год – или потенциально мог прийти во время октябрьской волатильности.

    Список конкурсов — Зал славы соревновательного программирования

    Дата Конкурс Местоположение
    15 августа 2022 г. IOI 2022 Джокьякарта и Интернет
    5 августа 2022 г. Google Code Jam 2022 Онлайн
    9 января 2022 г. CodeChef SnackDown 2021 Онлайн
    11 декабря 2021 г. Facebook Hacker Cup 2021 Онлайн
    19 ноября 2021 г. Topcoder Open 2021 Алгоритм Онлайн
    13 ноября 2021 г. Topcoder Open 2021 Marathon Онлайн
    5 октября 2021 г. ICPC 2020 World Finals Москва
    30 сентября 2021 г. ICPC 2020 WF Invitational Онлайн
    22 августа 2021 г. Кубок ВКонтакте 2021 Двигатель Онлайн
    7 августа 2021 г. Google Code Jam 2021 Онлайн
    25 июня 2021 г. IOI 2021 Онлайн
    30 января 2021 г. Codeflows 2020-2021 Онлайн
    5 декабря 2020 г. Facebook Hacker Cup 2020 Онлайн
    21 ноября 2020 г. Алгоритм Topcoder Open 2020 Онлайн
    14 ноября 2020 г. Topcoder Open 2020 Marathon Онлайн
    1 ноября 2020 г. Кубок ВК 2019-2020 Engine Онлайн
    19 сентября 2020 г. IOI 2020 Онлайн
    29 августа 2020 г. Код FII 2020 Онлайн
    8 августа 2020 г. Google Code Jam 2020 Онлайн
    16 ноября 2019 г. Алгоритм Topcoder Open 2019 Хьюстон, Техас
    13 ноября 2019 г. Topcoder Open 2019 Marathon Хьюстон, Техас
    25 октября 2019 г. Facebook Hacker Cup 2019 Дублин
    11 августа 2019 года IOI 2019 Баку
    9 августа 2019 г. Google Code Jam 2019 Сан-Франциско, Калифорния
    4 мая 2019 г. Forethought Future Cup Сан-Франциско, Калифорния
    13 апреля 2019 г. Код FII 2019 Яссы
    4 апреля 2019 г. Мировой финал ICPC 2019 Порту
    21 февраля 2019 г. Финал AtCoder World Tour 2019 Токио
    16 февраля 2019 г. CodeChef SnackDown 2019 Бангалор
    16 ноября 2018 г. Алгоритм Topcoder Open 2018 Даллас, Техас
    12 ноября 2018 г. Topcoder Open 2018 Marathon Даллас, Техас
    4 ноября 2018 г. Lyft Level 5 Challenge 2018 Пало-Альто, Калифорния
    2 ноября 2018 г. Facebook Hacker Cup 2018 Менло-Парк, Калифорния
    8 сентября 2018 г. IOI 2018 Цукуба
    12.08.2018 Кубок ВКонтакте 2018 Санкт-Петербург
    10 августа 2018 г. Google Code Jam 2018 Торонто, Онтарио
    9 августа 2018 г. Распределенный код Jam 2018 Торонто, Онтарио
    20.05.2018 Яндекс.Алгоритм 2018 Санкт-Петербург и Онлайн
    19 апреля 2018 г. Мировой финал ACM-ICPC 2018 Пекин
    25 ноября 2017 г. Code Festival 2017 Тиёда, Токио
    24 октября 2017 г. Алгоритм Topcoder Open 2017 Буффало, штат Нью-Йорк
    22 октября 2017 г. Topcoder Open 2017 Marathon Буффало, штат Нью-Йорк
    30 сентября 2017 г. MemSQL Start[c]UP 3.0 Сан-Франциско, Калифорния
    10 сентября 2017 г. Russian Code Cup 2017 Онлайн
    11 августа 2017 г. Google Code Jam 2017 Дублин
    10 августа 2017 г. Распределенный код Jam 2017 Дублин
    4 августа 2017 г. IOI 2017 Тегеран
    18 июля 2017 г. Яндекс.Алгоритм 2017 Москва и Онлайн
    09.07.2017 Кубок ВКонтакте 2017 Санкт-Петербург
    1 июля 2017 г. CodeChef SnackDown 2017 Мумбаи
    14 июня 2017 г. Facebook Hacker Cup 2017 Сиэтл, Вашингтон
    24 мая 2017 г. Мировой финал ACM-ICPC 2017 Рапид Сити, Южная Дакота
    13.05.2017 Тинькофф Челлендж 2017 Москва
    29 апреля 2017 г. MindCoding 2017 Клуж-Напока
    28 ноября 2016 г. Гранд-финал Code Festival 2016 Миура, Канагава
    26 ноября 2016 г. Code Festival 2016 Тюо, Токио
    21 ноября 2016 г. Topcoder Open 2016 Алгоритм Вашингтон, округ Колумбия
    19 ноября 2016 г. Topcoder Open 2016 Marathon Вашингтон, округ Колумбия
    18 сентября 2016 г. Russian Code Cup 2016 Онлайн
    19.08.2016 IOI 2016 Казань
    6 августа 2016 г. Распределенный код Jam 2016 Нью-Йорк, штат Нью-Йорк
    5 августа 2016 г. Google Code Jam 2016 Нью-Йорк, штат Нью-Йорк
    29.07.2016 Яндекс.Алгоритм 2016 Минск и Онлайн
    9 июля 2016 г. CodeChef SnackDown 2016 Мумбаи
    03.07.2016 Кубок ВКонтакте 2016 Санкт-Петербург
    19 мая 2016 г. Мировой финал ACM-ICPC 2016 Пхукет
    14 мая 2016 г. MindCoding 2016 Клуж-Напока
    15.04.2016 Крок Чемпион 2016 Москва
    3 марта 2016 г. Facebook Hacker Cup 2016 Лондон, Англия
    10 ноября 2015 г. Алгоритм Topcoder Open 2015 Индианаполис, Индиана
    9 ноября 2015 г. Topcoder Open 2015 Marathon Индианаполис, Индиана
    19 сентября 2015 г. Russian Code Cup 2015 Онлайн
    15 августа 2015 г. Распределенный код Jam 2015 Сиэтл, Вашингтон
    14 августа 2015 г. Google Code Jam 2015 Сиэтл, Вашингтон
    06.08.2015 Яндекс.Алгоритм 2015 Онлайн
    2 августа 2015 г. ИОИ 2015 Алматы
    26.07.2015 Кубок ВКонтакте 2015 Санкт-Петербург
    27 июня 2015 г. CodeChef SnackDown 2015 Мумбаи и онлайн
    20 мая 2015 г. Мировой финал ACM-ICPC 2015 Марракеш
    1 мая 2015 г. Чемпионат по программированию на баяне 2014-2015 Тегеран
    17 апреля 2015 г. MindCoding 2015 Клуж-Напока
    6 марта 2015 г. Facebook Hacker Cup 2015 Менло-Парк, Калифорния
    19 ноября 2014 г. Алгоритм Topcoder Open 2014 Сан-Франциско, Калифорния
    17 ноября 2014 г. Topcoder Open 2014 Marathon Сан-Франциско, Калифорния
    4 октября 2014 г. Russian Code Cup 2014 Онлайн
    15 августа 2014 г. Google Code Jam 2014 Лос-Анджелес, Калифорния
    10 августа 2014 г. MemSQL Start[c]UP 2.0 Сан-Франциско, Калифорния
    1 августа 2014 г. Яндекс.Алгоритм 2014 Берлин
    20 июля 2014 г. IOI 2014 Тайбэй
    25 июня 2014 г. ACM-ICPC 2014 World Finals Екатеринбург
    29.04.2014 Kotlin Challenge Санкт-Петербург
    21 февраля 2014 г. Facebook Hacker Cup 2014 Менло-Парк, Калифорния
    13 ноября 2013 г. Алгоритм Topcoder Open 2013 Вашингтон, округ Колумбия
    11 ноября 2013 г. Topcoder Open 2013 Marathon Вашингтон, округ Колумбия
    23.09.2013 Russian Code Cup 2013 Москва
    22.08.2013 Яндекс.Алгоритм 2013 Санкт-Петербург
    16 августа 2013 г. Google Code Jam 2013 Лондон, Англия
    3 августа 2013 г. MemSQL Start[c]UP Сан-Франциско, Калифорния
    13 июля 2013 г. IOI 2013 Брисбен
    3 июля 2013 г. ACM-ICPC 2013 World Finals Санкт-Петербург
    17.05.2013 Крок Чемпион 2013 Москва
    23 марта 2013 г. Facebook Hacker Cup 2013 Менло-Парк, Калифорния
    16 февраля 2013 г. Чемпионат по программированию на баяне 2012-2013 Тегеран
    3 октября 2012 г. Алгоритм Topcoder Open 2012 Орландо, Флорида
    1 октября 2012 г. Topcoder Open 2012 Marathon Орландо, Флорида
    30 сентября 2012 г. IOI 2012 Сирмионе и Монтикьяри
    10.09.2012 Russian Code Cup 2012 Москва
    27 июля 2012 г. Google Code Jam 2012 Нью-Йорк, штат Нью-Йорк
    15.07.2012 Кубок ВК 2012 Санкт-Петербург
    17 мая 2012 г. Мировой финал ACM-ICPC 2012 Варшава
    27.04.2012 Крок Чемпион 2012 Москва
    17 марта 2012 г. Facebook Hacker Cup 2012 Менло-Парк, Калифорния
    28 сентября 2011 г. Алгоритм Topcoder Open 2011 Голливуд, Флорида
    26 сентября 2011 г. Topcoder Open 2011 Marathon Голливуд, Флорида
    18.09.2011 Russian Code Cup 2011 Москва
    29 июля 2011 г. Google Code Jam 2011 Токио
    29 июля 2011 г. IOI 2011 Паттайя
    15.07.2011 Яндекс.Алгоритм 2011 Долгопрудный
    30 мая 2011 г. Мировой финал ACM-ICPC 2011 Орландо, Флорида
    12 марта 2011 г. Facebook Hacker Cup 2011 Пало-Альто, Калифорния
    14 октября 2010 г. Алгоритм Topcoder Open 2010 Лас-Вегас, Невада
    12 октября 2010 г. Topcoder Open 2010 Marathon Лас-Вегас, Невада
    21 августа 2010 г. IOI 2010 Ватерлоо, ON
    30 июля 2010 г. Google Code Jam 2010 Дублин
    16.07.2010 Яндекс Опен 2010 Долгопрудный
    20.03.2010 ТЧС 2010 Онлайн
    5 февраля 2010 г. Мировой финал ACM-ICPC 2010 Харбин
    13 ноября 2009 г. Google Code Jam 2009 Маунтин-Вью, Калифорния
    15 августа 2009 г. IOI 2009 Пловдив
    4 июня 2009 г. Алгоритм Topcoder Open 2009 Лас-Вегас, Невада
    2 июня 2009 г. Topcoder Open 2009 Marathon Лас-Вегас, Невада
    21 апреля 2009 г. Мировой финал ACM-ICPC 2009 Стокгольм
    24 января 2009 г. ТЧС 2009 Онлайн
    14 ноября 2008 г. Google Code Jam 2008 Маунтин-Вью, Калифорния
    23 августа 2008 г. IOI 2008 Каир
    15 мая 2008 г. Алгоритм Topcoder Open 2008 Лас-Вегас, Невада
    12 мая 2008 г. Topcoder Open 2008 Marathon Лас-Вегас, Невада
    9 апреля 2008 г. ACM-ICPC 2008 World Finals Banff, AB
    15 марта 2008 г. TCHS 2008 Уэст-Лафайет, Индиана
    2 ноября 2007 г. Алгоритм TCCC 2007 Орландо, Флорида
    31 октября 2007 г. TCCC 2007 Марафон Орландо, Флорида
    22 августа 2007 г. IOI 2007 Загреб
    29 июня 2007 г. Алгоритм Topcoder Open 2007 Лас-Вегас, Невада
    27 июня 2007 г. Topcoder Open 2007 Marathon Лас-Вегас, Невада
    19 мая 2007 г. TCHS 2007 Уэст-Лафайет, Индиана
    15 марта 2007 г. Мировой финал ACM-ICPC 2007 Ураясу, Тиба
    16.02.2007 Test-The-Best: Зимний Кубок Минск
    17 ноября 2006 г. Алгоритм TCCC 2006 Сан-Диего, Калифорния
    27 октября 2006 г. Google Code Jam 2006 Нью-Йорк, штат Нью-Йорк
    20 августа 2006 г. IOI 2006 Мерида
    5 мая 2006 г. Алгоритм Topcoder Open 2006 Лас-Вегас, Невада
    12 апреля 2006 г. Мировой финал ACM-ICPC 2006 Сан-Антонио, Техас
    25.03.2006 Test-The-Best: 3-й основной конкурс Минск
    14 октября 2005 г. Алгоритм Topcoder Open 2005 Санта-Клара, Калифорния
    23 сентября 2005 г. Google Code Jam 2005 Маунтин-Вью, Калифорния
    25 августа 2005 г. IOI 2005 Новы-Сонч
    6 апреля 2005 г. Мировой финал ACM-ICPC 2005 Шанхай
    11 марта 2005 г. Алгоритм TCCC 2005 Санта-Клара, Калифорния
    12 ноября 2004 г. Алгоритм TopCoder Open 2004 Санта-Клара, Калифорния
    15 октября 2004 г. Google Code Jam 2004 Маунтин-Вью, Калифорния
    18 сентября 2004 г. IOI 2004 Афины
    16 апреля 2004 г. Алгоритм TCCC 2004 Бостон, Массачусетс
    31 марта 2004 г. Мировой финал ACM-ICPC 2004 Прага
    5 декабря 2003 г. TopCoder Open 2003 Coding Анкасвилл, Коннектикут
    14 ноября 2003 г. Google Code Jam 2003 Маунтин-Вью, Калифорния
    23 августа 2003 г. IOI 2003 Кеноша, Висконсин
    5 апреля 2003 г. TCCC 2003 Кембридж, Массачусетс
    25 марта 2003 г. Мировой финал ACM-ICPC 2003 Беверли-Хиллз, Калифорния
    23 ноября 2002 г. TopCoder Invitational 2002 Анкасвилл, Коннектикут
    25 августа 2002 г. IOI 2002 Ён-Ин
    23 марта 2002 г. Мировой финал ACM-ICPC 2002 Гонолулу, Гавайи
    3 ноября 2001 г. TopCoder Invitational 2001 Машантакет, Ледьярд, Коннектикут
    21 июля 2001 г. IOI 2001 Тампере
    10 марта 2001 г. Мировой финал ACM-ICPC 2001 Ванкувер, Британская Колумбия
    30 сентября 2000 г. IOI 2000 Пекин
    18 марта 2000 г. Мировой финал ACM-ICPC 2000 Орландо, Флорида
    16 октября 1999 г. IOI 1999 Анталия-Белек
    11 апреля 1999 г. Мировой финал ACM-ICPC 1999 Эйндховен
    12 сентября 1998 г. IOI 1998 Сетубал
    7 декабря 1997 г. IOI 1997 Кейптаун
    2 августа 1996 г. IOI 1996 Веспрем
    3 июля 1995 г. IOI 1995 Эйндховен
    10 июля 1994 г.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *