Случайны выбор дневника Раскрыть/свернуть полный список возможностей


Найдено 5239 сообщений
Cообщения с меткой

mail.ru - Самое интересное в блогах

Следующие 30  »
rss_rss_hh_new

Приглашаем на Symfony Moscow Meetup 2 июня

Среда, 25 Мая 2016 г. 15:56 (ссылка)


image



2 июня в московском офисе Mail.Ru Group пройдёт восьмая встреча сообщества Symfony Moscow Meetup — встреча разработчиков на PHP/Symfony2. Участники обсудят разработку веб-приложений и смежные технологии, обменяются опытом, последними техническими новостями и пообщаются в неформальной обстановке. На встрече будет представлено 4 доклада. Подробности читайте под катом.

Читать дальше →

https://habrahabr.ru/post/301744/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Отчет с Moscow CocoaHeads Meetup 29 апреля

Среда, 18 Мая 2016 г. 19:51 (ссылка)






29 апреля в нашем офисе прошёл очередной митап Moscow CocoaHeads, посвящённый актуальным вопросам iOS- и OS X-разработки. Предлагаем всем желающим ознакомиться с видеозаписями и презентациями прозвучавших на митапе докладов.

Читать дальше →

https://habrahabr.ru/post/301156/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Трансляции мастер-классов от Mail.Ru Group на канале Технострим

Среда, 18 Мая 2016 г. 14:52 (ссылка)






Привет, Хабр! Сегодня мы хотим рассказать вам о еще одной нашей активности — мастер-классах онлайн на канале Технострим. В них мы приглашаем экспертов из компании, которые читают лекцию либо обсуждают какую-то тему из IT — от карьерного пути до узких профессиональных вопросов. Мастер-класс проходит в формате прямой трансляции, то есть вы можете не только посмотреть и послушать выступающих, но и задать им вопросы в чате трансляции YouTube и практически сразу получить ответ от спикеров.



В апреле мы уже провели несколько мастер-классов, например Обработка текстов на естественном языке. Дмитрий Бугайченко, инженер-аналитик Mail.Ru Group, рассказывал про обработку естественных языков. Объять необъятное в рамках одной лекции, конечно, невозможно, поэтому мы сконцентрировались на вопросе рекомендации контента и рассмотрели необходимый для этого стек задач: токенизацию, векторизацию, семантический и эмоциональный анализ. Больше записей мастер-классов — здесь.



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

Читать дальше →

https://habrahabr.ru/post/301110/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Отчет с семинара RISSPA 20 апреля

Понедельник, 16 Мая 2016 г. 18:29 (ссылка)


image



В апреле в офисе Mail.Ru Group прошёл семинар ассоциации RISSPA, посвящённый информационной безопасности. Предлагаем вашему вниманию видеозаписи и презентации докладов, прозвучавших на семинаре.

Читать дальше →

https://habrahabr.ru/post/300926/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Отчёт с Moscow Atlassian Meetup 20 апреля

Пятница, 13 Мая 2016 г. 19:19 (ссылка)





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



«История разработки eazyBI», Raimonds Simanovskis (eazyBI, Латвия)



eazyBI позволяет легко строить отчеты и графики, являясь одним из самих популярных JIRA-плагинов на Atlassian Marketplace. Основатель и главный разработчик eazyBI Раймондс Симановскиc приехал из Латвии, чтобы рассказать об эволюции eazyBI из отдельного веб-приложения в набор из нескольких продуктов с различными вариантами развертывания.



Некоторые тезисы:




  • упаковка JRuby on Rails-приложения как плагина для JIRA;

  • проблемы с поддержкой многих версий JIRA, баз данных, операционных систем;

  • вынесение JIRA-плагинa из JIRA JVM-процесса;

  • основные архитектурные проблемы разработки Atlassian Connect-плагинa для JIRA Cloud.







Видеозапись выступления: it.mail.ru/video/576



«Как написать свой первый плагин для JIRA», Александр Кузнецов (StiltSoft, Белоруссия)



Вы — опытный администратор JIRA? Легко настраиваете кастомные поля, никогда не теряетесь в переходах по workflow, но иногда вам не хватает стандартной функциональности JIRA? Ничего страшного — у вас всегда есть возможность написать плагин для JIRA. Не умеете? Научим!



В докладе речь шла о том, какие первые шаги следует предпринять опытному администратору JIRA при разработке своего первого плагина. Александр рассказал про Atlassian SDK и про её наиболее часто применимые команды, упрощающие жизнь начинающему разработчику плагинов. Была досконально разобрана структура плагина, из каких основных «кирпичиков» он состоит и как эти «кирпичики» объединить в единое целое. В ходе выступления вместе с аудиторией попробовали написать свой первый плагин и запустить его в JIRA.







Видеозапись выступления: it.mail.ru/video/574



«Pocker — GUI для Docker», Владимир Василькин (ALMWorks, Санкт-Петербург)



Простое и быстрое развертывание продуктов Atlassian в различных конфигурациях и управление ими. При разработке плагинов для решений Atlassian у всех участников процесса часто возникает необходимость развернуть JIRA или Confluence в определенном окружении:




  • разработчики делают это для отладки;

  • QA — для тестирования;

  • служба поддержки — для воспроизведения проблем заказчика;

  • продажи — для демонстрации новой функциональности;

  • системные администраторы — для разработчиков, QA и остальных.



Владимир рассказал о том, как с помощью OpenSource-инструмента Pocker можно просто и быстро поднимать подобные конфигурации, выбирая разные СУБД, версии, плагины, базы, а затем управлять ими — запускать/выключать, просматривать логи и так далее.







Видеозапись выступления: it.mail.ru/video/575



Заключение



Нам самим очень понравилась техническая направленность митапа. Мы планируем проводить следующие встречи именно в этом формате, менеджерских мероприятий хватает и без нас. :)



Большое спасибо всем участникам и особенно — докладчикам! Приходите в следующий раз.



P. S. У нас есть профессиональное сообщество в социальных сетях, где мы обсуждаем использование продуктов Atlassian, обмениваемся опытом и публикуем информацию о связанных мероприятиях (в том числе и менеджерских).



Присоединяйтесь:







Original source: habrahabr.ru.

https://habrahabr.ru/post/283510/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Отчёт с Moscow Atlassian Meetup 20 апреля

Пятница, 13 Мая 2016 г. 19:19 (ссылка)





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



«История разработки eazyBI», Raimonds Simanovskis (eazyBI, Латвия)



eazyBI позволяет легко строить отчеты и графики, являясь одним из самих популярных JIRA-плагинов на Atlassian Marketplace. Основатель и главный разработчик eazyBI Раймондс Симановскиc приехал из Латвии, чтобы рассказать об эволюции eazyBI из отдельного веб-приложения в набор из нескольких продуктов с различными вариантами развертывания.



Некоторые тезисы:




  • упаковка JRuby on Rails-приложения как плагина для JIRA;

  • проблемы с поддержкой многих версий JIRA, баз данных, операционных систем;

  • вынесение JIRA-плагинa из JIRA JVM-процесса;

  • основные архитектурные проблемы разработки Atlassian Connect-плагинa для JIRA Cloud.







Видеозапись выступления: it.mail.ru/video/576



«Как написать свой первый плагин для JIRA», Александр Кузнецов (StiltSoft, Белоруссия)



Вы — опытный администратор JIRA? Легко настраиваете кастомные поля, никогда не теряетесь в переходах по workflow, но иногда вам не хватает стандартной функциональности JIRA? Ничего страшного — у вас всегда есть возможность написать плагин для JIRA. Не умеете? Научим!



В докладе речь шла о том, какие первые шаги следует предпринять опытному администратору JIRA при разработке своего первого плагина. Александр рассказал про Atlassian SDK и про её наиболее часто применимые команды, упрощающие жизнь начинающему разработчику плагинов. Была досконально разобрана структура плагина, из каких основных «кирпичиков» он состоит и как эти «кирпичики» объединить в единое целое. В ходе выступления вместе с аудиторией попробовали написать свой первый плагин и запустить его в JIRA.







Видеозапись выступления: it.mail.ru/video/574



«Pocker — GUI для Docker», Владимир Василькин (ALMWorks, Санкт-Петербург)



Простое и быстрое развертывание продуктов Atlassian в различных конфигурациях и управление ими. При разработке плагинов для решений Atlassian у всех участников процесса часто возникает необходимость развернуть JIRA или Confluence в определенном окружении:




  • разработчики делают это для отладки;

  • QA — для тестирования;

  • служба поддержки — для воспроизведения проблем заказчика;

  • продажи — для демонстрации новой функциональности;

  • системные администраторы — для разработчиков, QA и остальных.



Владимир рассказал о том, как с помощью OpenSource-инструмента Pocker можно просто и быстро поднимать подобные конфигурации, выбирая разные СУБД, версии, плагины, базы, а затем управлять ими — запускать/выключать, просматривать логи и так далее.







Видеозапись выступления: it.mail.ru/video/575



Заключение



Нам самим очень понравилась техническая направленность митапа. Мы планируем проводить следующие встречи именно в этом формате, менеджерских мероприятий хватает и без нас. :)



Большое спасибо всем участникам и особенно — докладчикам! Приходите в следующий раз.



P. S. У нас есть профессиональное сообщество в социальных сетях, где мы обсуждаем использование продуктов Atlassian, обмениваемся опытом и публикуем информацию о связанных мероприятиях (в том числе и менеджерских).



Присоединяйтесь:







Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/283510/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Записывайтесь на новый онлайн-курс от Mail.Ru Group на Stepic

Четверг, 12 Мая 2016 г. 14:33 (ссылка)

image



Мы продолжаем запускать в партнерстве со Stepic бесплатные онлайн-курсы по дисциплинам из Технопарка, Техносферы и Технотрека. Сегодня мы хотим представить наш новый курс: «Основы постановки задачи на разработку программ».



Кроме того, мы перезапускаем три курса: «Web-технологии», «Многопоточное программирование», «Hadoop» — и снова открываем на них запись.



Основы постановки задачи на разработку программ



Курс формирует основные навыки подготовки и документирования требований к программному обеспечению. По итогам курса вы научитесь:



— работать с требованиями и заинтересованными сторонами;

— анализировать проблему и формулировать требования;

— проектировать взаимодействие пользователей с системой;

— обеспечивать необходимые качества системы на этапе постановки задачи.



Программа курса состоит из шести модулей.



1. Постановка задачи на разработку (зачем нужны требования?)




  • Вводный урок курса

  • Введение в проектирование требований

  • Определение контекста и границ системы

  • Анализ заинтересованных сторон



2. Бизнес-требования и бизнес-анализ




  • Введение в бизнес-анализ

  • Обзор техник сбора требований

  • Интервью для сбора потребностей

  • Формирование глоссария

  • Анализ проблемы

  • Формулирование проблемы

  • Определение возможностей решения

  • Документирование бизнес-требований



3. Определение поведения системы (функциональные требования)




  • Модель использования системы

  • Оптимизация модели использования системы

  • Документирование сценария/варианта использования системы



4. Требования к качеству (нефункциональные требования)




  • Качество программных продуктов

  • Категории нефункциональных требований

  • Сценарии атрибутов качества



5. Управление требованиями




  • Система управления требованиями

  • Прослеживаемость требований

  • Приоритизация требований

  • Управление изменениями



6. Подведение итогов




  • Что дальше?

  • Заключительный урок



Регистрация на IT.Mail.Ru.

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



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



Одна из главных ошибок, которую совершают менеджеры, — не объясняют ценности задачи. Это пришло к нам из менеджмента XX века, где задача, по сути, есть приказ, который не обсуждается и обязателен к исполнению. Из-за этого разработчики теряют мотивацию, начинают считать менеджеров самодурами и относятся к выполнению задачи формально. Именно формальное отношение к задаче — наш главный враг. Мы стараемся не допускать ситуаций, когда разработчик использует отговорку «к пуговицам претензий нет». Основной принцип, который исповедуется в нашей команде, — передача максимальной ответственности исполнителям. Для этого важно привлечь разработчиков еще на этапе разработки спецификации, чтобы они почувствовали причастность к общей цели, а также указали на возможные технические ограничения.



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



Роман Новиков, руководитель проекта Мой Мир


Перезапуск курсов



Кроме нового курса, мы доработали запущенные ранее программы и снова открыли запись на них. Регистрация через портал IT.Mail.Ru:




  1. 30 апреля начнется курс по web-технологиям.

  2. 20 мая — «Многопоточное программирование на C/C++».

  3. 23 мая — «Hadoop. Система для обработки больших объемов данных».





Original source: habrahabr.ru.

https://habrahabr.ru/post/283396/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Разбор задач первого квалификационного раунда RCC 2016

Среда, 11 Мая 2016 г. 14:35 (ссылка)



Merthyr Tunnel by Pictonart



8 мая состоялся первый квалификационный раунд чемпионата Russian Code Cup 2016. Напоминаем, что в этом году состязание программистов впервые проводится и на английском языке, так что языковой барьер теперь не является препятствием для наших зарубежных участников. Для прохождения первого квалификационного раунда было необходимо решить пять задач. На решение отводилось не более двух часов. Учитывалась не только правильность, но и скорость решения. Всего в раунде приняли участие 3559 человек, из которых занявшие первые 200 мест переходят на следующий этап соревнований. А пока давайте рассмотрим решения предложенных задач:




  1. Двоичная строка

  2. Поезд и туннель

  3. Красивое разбиение

  4. Подготовка задач

  5. Похожее метро



Задача A. Двоичная строка



Условие:



Ограничение по времени 2 секунды

Ограничение по памяти 256 мегабайт



Петя написал на доске строку длины n из нулей и единиц. После этого он посмотрел на все пары стоящих подряд символов и выяснил, что пара 00 встречается a раз, пара 01 встречается b раз, пара 10 встречается c раз, а пара 11 — d раз (a + b + c + d = n - 1).



Хулиган Гриша стер его строчку. Погрустив, Петя теперь хочет восстановить какую-нибудь строчку, для которой выполняются те же условия на количество пар соответствующих соседних символов. Помогите ему!



Формат входных данных:



На ввод подаётся несколько тестовых примеров. Первая строка содержит целое положительное число t (1 <= t <= 10 000) — количество тестовых примеров.



Каждый тестовый пример описывается одной строкой, содержащей четыре числа a, b, c и d (0 <= a, b, c, d <= 20) — количество пар соседних символов, равных 00, 01, 10, 11, соответственно.



Гарантируется, что a + b + c + d >= 1.



Формат выходных данных:



Выведите t строк. Для каждого тестового примера выведите искомую строку, состоящую из нулей и единиц, или impossible в случае, если такой строки не существует.



Примеры:



Входные данные

5

0 0 1 0

1 0 0 1

1 1 1 1

2 1 1 2

1 2 3 4



Выходные данные

10

impossible

00110

0001110

11111001010



Решение:



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




  • • Либо |b - c| > 1

  • • Либо b = 0, c = 0, и при этом a /= 0 и d /= 0



Для остальных случаев будем решать в два этапа: Сначала соберем минимальную строку, которая будет удовлетворять условиям на строки 01 и 10, а затем допишем после первого встреченного нуля a - 1 ноль, а после первой встреченной единицы d - 1 единицу. Очевидно, что условия на 01 и 10 от таких действий не испортятся.



Задача B. Поезд и туннель



Условие:



Ограничение по времени 2 секунды

Ограничение по памяти 256 мегабайт



Петя решил отправиться в путешествие. Сейчас он едет в поезде. Поезд состоит из n вагонов, длина i-го вагона — ai метров. Расстоянием между вагонами можно пренебречь.



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



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



Формат входных данных:



Входные данные содержат несколько тестовых примеров. Первая строка содержит одно число t (1 <= t <= 100) –— количество тестов. Далее следуют описания тестов.



Каждый тест задается следующим образом: первая строка содержит два натуральных числа n, h (1 <= n <= 105, 1 <= h <= 109) — количество вагонов в поезде и длину туннеля в метрах. Следующая строка теста содержит n натуральных чисел ai (1 <= ai <= 109) — длины вагонов в метрах. Следующая строка содержит n чисел, i-е из который равно 1, если в i-м вагоне изначально включен свет, и 0 в противном случае. Вагоны перечисленны от головы к хвосту поезда.



Сумма значений n по всем тестам не превышает 106.



Формат выходных данных:



Для каждого тестового примера выведите единственное число — наименьшее количество вагонов, в которых нужно включить свет.



Примеры:



Входные данные

2

7 10

5 3 4 5 9 9 9

1 0 0 0 1 0 0

5 2

1 2 3 1 1

1 1 0 1 1



Выходные данные

2

1



Решение:



Разобьем весь поезд на отрезки вагонов без света. Будем идти по каждой группе из таких вагонов, и в том вагоне, на котором суммарная длина вагонов становится не меньше h, будем включать свет. Очевидно, что данная стратегия дает наименьший результат. Также нужно не забыть включить свет в первом и последнем вагонах: при въезде в туннель и выезде из него, соответственно, эти вагоны образуют темный момент времени.



Задача C. Красивое разбиение



Условие:



Ограничение по времени 2 секунды

Ограничение по памяти 256 мегабайт



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



Так, на уроке информатике учитель выписал на доску массив целых чисел, а Петя сразу же заметил, что его элементы можно разбить на два набора M1 и M2 так, что gcd(M1) и gcd(M2) довольно большие. Здесь gcd(M), где M — непустой набор чисел, означает наибольший общий делитель всех чисел из M.



Петя решил обобщить задачу: по данному массиву чисел он хочет найти разбиение его элементов на два непустых набора M1 и M2, чтобы min(gcd(M1), gcd(M2)) был как можно больше. Помогите ему с этой задачей.



Формат входных данных:



Входные данные содержат несколько тестовых наборов. В первой строке задано количество тестов t (1 <= t <= 1000).

Каждый из тестов описывается следующим образом: в первой строке описания теста содержится число n (2 <= n <= 5•104) — количество элементов массива. В следующей строке содержатся n чисел ai (1 <= ai <= 109) — элемент1 массива.



Сумма значений n во всех тестах одних входных данных не превышает 5•104.



Формат выходных данных:



Для каждого теста в отдельной строке выведите ответ на него — максимальное возможное значение min(gcd(M1), gcd(M2)).



Примеры:



Входные данные

3

5

3 2 4 6 9

3

3 5 14

4

6 4 6 6



Выходные данные

2

1

4



Решение:



Первый элемент массива входит либо в M1, либо в M2. Не умаляя общности, будем считать, что он входит в M1. Тогда a[1] делится на gcd(M1), то есть gcd(M1) — делитель a[1].



Переберем все делители a[1] (их не больше 1344 для чисел до 109). Рассматривая текущий делитель d, возьмем все элементы массива, делящиеся на d, в M1 (так как от этого gcd(M1) не станет меньше d, а чем меньше элементов в M2, тем gcd(M2) больше), а все остальные элементы в M2 и обновим ответ величиной min(gcd(M1), gcd(M2)). Заметим, что мы можем пренебречь тем, что M2 будет пустым, считая в этом случае gcd для него равным бесконечности, поскольку все элементы в таком случае делятся на d, то и gcd(M2) будет не меньше d.



Асимптотика решения — O(sqrt(a[1]) + d(a[1])•n), где d(a[1]) <= 1344.



Задача D. Подготовка задач



Условие:



Ограничение по времени 2 секунды

Ограничение по памяти 256 мегабайт



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



Он пока не знает, сколько именно друзей ему будут помогать, но хочет справедливо распределить работу между помощниками. Поэтому для каждой задачи он хочет определить такое целое число xi, чтобы каждый из друзей потратил на её подготовку ровно xi минут. Андрей считает, что задача i получится качественной, если все друзья в сумме потратят на её подготовку хотя бы ti минут.



Иногда Андрей понимает, что неправильно оценил время, которое необходимо для качественной разработки какой-то задачи, и увеличивает или уменьшает ti на 1. Вам необходимо помогать Андрею оценить, сколько суммарно времени потребуется для подготовки задач.



Заданы начальные оценки времени на подготовку задач ti. Требуется обработать m запросов. Каждый запрос описывается следующим образом:




  • 1 i — Андрей решил увеличить значение ti на один;

  • 2 i — Андрей решил уменьшить значение ti на один;

  • 3 k — Андрей хочет узнать, сколько суммарно времени потребуется одному другу на подготовку задач, если ему будут помогать k его друзей.



Формат входных данных:



В первой строке задано два целых числа n и m (1 <= n, m <= 105) — количество задач и количество запросов.



В следующей строке заданы n целых чисел ti (1 <= ti <= 5•105) — время, которое необходимо для подготовки i-й задачи по начальной оценке Андрея.



В следующих m строках следуют запросы. Каждый из них описывается двумя числами, первое из которых — его тип. Если тип 1 или 2, то второе число i (1 <= i <= n) является номером задачи. А если тип 3, то второе число k (1 <= k <= 5•105) это количество друзей, которые собираются помогать Андрею.



Гарантируется, что ti всегда находится в пределах от 1 до 5•105.



Формат выходных данных:



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



Примеры:



Входные данные

5 11

1 2 3 4 5

3 1

3 2

3 3

1 1

3 1

3 2

3 3

2 5

3 1

3 2

3 3



Выходные данные

15

9

7

16

9

7

15

8

7



Решение:



Для начала решим задачу, если нет запросов на изменение времен. Из массива ti сгенерируем новый массив cntj, в котором будем хранить количество задач, на которые необходимо потратить j минут, а также предподсчитаем массив его префиксных сумм. Тогда количество времени, которое потратит каждый друг, если их всего k, можно посчитать за O(MAX / k), где MAX — максимальное необходимое на задачу время (просто перебрав, на какие задачи потребуется 1, 2,… MAX / k минут). Как известно, суммарное время работы такого алгоритма для всех k от 1 до MAX равно O(MAXlog(MAX)).



Теперь посмотрим, что происходит, когда время, необходимое на задачу, изменяется с t на t + 1. Ответы поменяются только для k являющихся делителями t. Поскольку максимальное количество делителей у чисел до 5•105 равно 200, то можно просто их все перебрать за время пропорциональное их количеству и обновить ответ только для них.



Аналогично, если время изменяется с t на t - 1, то ответы меняются для чисел, которые являются делителями t - 1.



Задача E. Похожее метро



Условие:



Ограничение по времени 3 секунды

Ограничение по памяти 256 мегабайт



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



Чтобы доказать другу Пете, что карты метро обоих городов действительно похожи, Вася хочет предъявить ему связный набор из k станций ai в Байтляндии, и соответствующий набор из k станций bi в Байтовии, такие, что для любых i, j между станциями ai и aj в Байтляндии есть тоннель тогда и только тогда, когда есть тоннель между станциями bi и bj в Байтовии. Набор станций называется связным, если от любой станции этого набора можно доехать до любой другой станции набора, проезжая только по станциям этого набора.



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



Формат входных данных:



В первой строке дано одно целое число n (1 <= n <= 50) — количество станций метро в Байтляндии.



В следующих n - 1 строках даны пары чисел ui, vi (1 <= ui, vi <= n) — номера станций в Байтляндии, между которыми есть тоннель. Гарантируется, что между любой парой станций есть ровно один простой путь.



В следующей строке дано одно целое число m (1 <= m <= 50) — количество станций метро в Байтовии.



В следующих m - 1 строках даны пары чисел ui, vi (1 <= ui, vi <= m) — номера станций в Байтовии, между которыми есть тоннель. Гарантируется, что между любой парой станций есть ровно один простой путь.



Формат выходных данных:



Выведите одно целое число k — максимально возможный размер пары похожих наборов станций.



Примеры:



Входные данные

3

1 2

2 3

3

1 3

3 2



Выходные данные

3



Входные данные

5

4 1

2 4

4 3

3 5

5

1 2

2 3

3 4

4 5



Выходные данные

4



Решение:



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



Посчитаем для пары ориентированных ребер (u1, v1) в первом дереве и (u2, v2) во втором дереве значение dp[u1][v1][u2][v2], равное размеру наибольшей пары изоморфных поддеревьев, если вершина u1 перейдет в вершину u2, а вершины v1 и v2 обязательно не войдут в выбранные поддеревья. Кроме того, разрешим vi быть равной какой-нибудь фиктивной вершине -1, это будет значить, что удаленного поддерева vi нет, и можно использовать для общего поддерева все вершины. Если мы посчитаем такую величину, ответом будет максимум по всем парам вершин u1, u2 величины dp[u1][-1][u2][-1].



Чтобы посчитать dp[u1][v1][u2][v2], нужно каким-то образом сопоставить поддеревья u1 и u2 друг другу. Заметим, что если e1 — сын вершины u1, отличный от v1, то поддерево e1 содержит меньше вершин, чем поддерево u1, при подвешивании дерева за v1. Для сыновей e1 вершины u1 и e2 вершины u2 мы по предположению индукции уже посчитали dp[e1][u1][e2][u2], так что мы знаем, сколько вершин можно добавить в искомое поддерево, если вершине e1 в нем будет соответствовать e2. Если у вершины u1k сыновей, у u2m сыновей, то мы получаем матрицу ai, j размера k•m, в которой нужно выбрать несколько ячеек с максимальной суммой, при условии, что в каждом столбце и в каждой строке выбрано не больше одной ячейки. Это стандартная задача о назначении, которая решается Венгерским алгоритмом.



Итоговая сложность решения — O(n5), n2 способов выбрать пару ребер в двух деревьях и O(n3) — время работы Венгерского алгоритма. Для оптимизации можно не решать задачу о назначении для одинаковых (изоморфных) пар деревьев несколько раз, а запомнить ответ.



* * *



Если вы не подали заявку на участие в чемпионате, у вас ещё есть время! Регистрируйтесь на сайте Russian Code Cup до 29 мая и примите участие во втором квалификационном раунде.



Чемпионат Russian Code Cup входит в число инициатив Mail.Ru Group, направленных на развитие российской IT-отрасли и объединённых ресурсом IT.Mail.Ru. Платформа IT.Mail.Ru создана для тех, кто увлекается IT и стремится профессионально развиваться в этой сфере. Проект объединяет чемпионаты Russian Ai Cup, Russian Code Cup и Russian Developers Cup, образовательные проекты Технопарк в МГТУ им. Баумана, Техносфера в МГУ им. М.В. Ломоносова и Технотрек в МФТИ. Кроме того, на IT.Mail.Ru можно с помощью тестов проверить свои знания по популярным языкам программирования, узнать важные новости из мира IT, посетить или посмотреть трансляции с профильных мероприятий и лекции на IT-тематику.



Original source: habrahabr.ru.

https://habrahabr.ru/post/283270/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество

Следующие 30  »

<mail.ru - Самое интересное в блогах

Страницы: [1] 2 3 ..
.. 10

LiveInternet.Ru Ссылки: на главную|почта|знакомства|одноклассники|фото|открытки|тесты|чат
О проекте: помощь|контакты|разместить рекламу|версия для pda