Привет, Codeforces!
В этом году состоится уже XVI Открытая Всесибирская олимпиада им. И. В. Поттосина — масштабное соревнование по программированию, в котором принимают участие студенты вузов со всей России, а так же стран СНГ. Олимпиада состоит из отборочного и очного этапов. Отборочный этап проходит через интернет в формате ACM и участвовать в нём могут все желающие команды. Основной язык олимпиады, на котором написаны условия задач и происходит общение с жюри, — русский. В очный этап проходит 50 команд, при этом для команд от Сибири и Дальнего Востока выделяется квота не менее 50% от общего числа участников очного тура.
Очный этап традиционно состоит из двух туров. Один из них проходит по правилам ACM-олимпиад: 8-12 задач, на решение которых отводится 5 часов. Второй тур представляет из себя одну "большую" задачу, которую участники так же решают в течение 5 часов. Тематика задач такого тура разнообразна: ранее были игровые задачи, где участники писали ботов, соревнующихся друг с другом, задачи на параллельное программирование, просто сложные задачи, в которых требовалось написать хотя бы частичное решение. Более подробно правила и положение олимпиады можно прочитать здесь.
Отборочный интернет-тур состоится завтра, 4 октября, в 11:00 по московскому времени. Очный тур пройдёт в Новосибирске с 7 по 9 ноября.
Параллельно с отборочным соревнованием на этом же наборе задач будет проходить этап Открытого кубка. Команды, желающие участвовать в отборочном раунде и бороться за выход в очный тур, должны регистрироваться и писать контест в системе тестирования NSUTs. Остальные команды, желающие просто написать хороший контест, могут решать его как обычный этап Открытого Кубка.
Регистрация в системе тестирования открыта здесь (да, форма регистрации сейчас переживает свои нелучшие времена, но мы работаем над ней).
Что нужно ввести в поле "Я согласен с условиями политики конфиденциальности (Да / Нет)", чтобы зарегистрироваться? И куда установить радио-баттон?
Попробуйте "Да".
Пробовал, не пускает. Говорит, что неверное значение.
Пустило, спасибо (регистр играет роль)
Просьба при наличии логина в opencup (Я.контесте для Div1 или ejudge для Div2) указывать этот логин в регистрационной форме NSUts; для Div2 в скобочках указывать (2).
Задачи на Гран-При Евразии будут общими для двух дивизионов, но отдельный зачёт по дивизионам всё равно будет.
Где указывать? В регистрационной форме указывается только email?
При заполнении формы есть и поле "логин опенкапа".
Я так и не понял, что указывать, если логина нет. Написал "-".
Ну вот например. Или "Нет логина".
Точнее "No login". Кириллица не поддерживается, как я понял.
А вроде бы у вашей команды был логин и даже сектор?
Да, просто в кубке пока не участвуем.
Не много запутался на сайте. Ссылки на интерент-тур нет? Есть пока только ссыль на пробный тур...
(UPD) всё появилось.
Таблица результатов в зачёт отбора с указанием opencup_id и возможностью выбора favorite team(s) (обновляется нерегулярно).
Тестирование вообще собираетесь поднимать?
Да, собираемся, в данный момент и работаем над этой проблемой
Проблемы с тестированием решены. Все посылки, висевшие в очереди, в данный момент протестированы.
А бывает выгодно в 10й задаче идти ровно на расстояния mpi? Может кто получал WA7?
Есть подозрение, что WA7 — это если разрешить проходить через города (и останавливаться в них). По крайней мере, когда я это разрешил — я получил WA7.
Более интересный вопрос — что такое WA11. Я перепроверил свой код 57 раз и представить не могу, в чём может быть проблема...
Мы это как раз обработали :-)
Теперь ОК
11й тест как раз на проверку того, что нельзя стрелять, стоя в городе.
А 42-ой?
42й — просто рандомный, не очень большой тест.
What is wa13? My idea is mincost-maxflow
13th test: one city with 18 HP and surrounded by 18 catapults
Интересно, а есть ли какое-нибудь другое решение, кроме как mincost-maxflow?
Зачем минкост? Просто поток, без стоимостей.
Как один из способов бороться с проблемой, про которую я писал чуть ниже, мы писали минкост.
Но можно и добавить фиктивный город, тогда будет просто поток.
Мы просто аккуратно восстанавливали ответ.
Есть список позиций, для них известно, по какому городу стреляем. Если две катапульты едут в одну и ту же позицию, то мы оставим из них ту, которая изначально стояла в этой клетке, а вторую двигать не будем. Таким образом, после каждой итерации кол-во катапульт, которые мы оставили на месте, будет увеличиваться, а значит процесс закончится.
Не уверен что правильно понимаю — зачем запрещать стрелять стоя в городе, если туда даже зайти не получится?
Я был бы очень благодарен, если можно было бы посмотреть на тест.
Вы учитываете, что можете случайно прийти какой-то катапультой в то место, где уже стояла другая, в текущем раскладе не используемая?
Как решать задачи Букет,Хэш-функция,Плэй-офф?
Задача 9. Хэш-функция.
В задаче ответ есть всегда единственный.
Надо нарисовать эти сложения и XOR на бумажке в столбик и заметить это.
Рассмотрим самый простой пример.
Знаем c, знаем с = a ^ (a<<16), найдем a.
Обозначим b = (a<<16).
Младшие 16 бит a равны младшим 16 битам с. Установим эти биты в a. b = a << 16. И тогда a = с — b.
Аналогично для других сдвигов, только там эти операции надо повторять несколько раз.
Хеш-функция — вглядываемся в то, что там происходит и получаем такую функцию обращения: #rx8VI4
Можно заметить, что x+(x<<16) = x*(2^16 + 1), то есть можно домножить на обратный к 2^16+1 по модулю 2^32 (он существует, потому что число взаимно просто с модулем). Для xor выше написали.
Мдаа, когда мы писали эту олимпиаду, я для x + (x << ?) прям длинку своеобразную прописывал, а оказывается, что так можно было
Как решать задачу 3-Неравенства? Что за 12ый тест?
Скажем, что xi > xj или xi ≥ xj — это ребро из i в j. Числам тоже сделаем мнимые вершины. Далее сконденсируем полученный граф. Если в какой-то КСС есть два разных числа или есть > , а не только ≥ , то ответ не получить. Иначе пытаемся поставить его по топологической сортировке компонент сильной связности как динамика по ориентированному ациклическому графу (возможно, не получится, тогда тоже NO).
Окей, как оказалось со мной согласны уже как минимум 60 человек, так что не буду держать свои мысли в себе.
1) Почему вы запилили свою систему проверки, если не умеете? Остальные обладают фатальным недостатком? Или, может быть, ответственные за Я.Контест и snark вам отказали в помощи?
2) Почему задачи такие мерзкие и простые? Нет, серьезно, лучше не включать такие задачи, как 12, в контест, чем включать.
3) За каким чертом я обязан себе ставить MinGW или вижак и проверять, компилируется ли все, что я отсылаю, на них, если вы даже в положении не написали о компиляторах? Лол, да в каждом компиляторе свои заморочки.
4) Что еще за бредятина с минусами за 1 тест? Или у вас с long double все нормально во всех компиляторах?
5) Очень круто продлевать тур на 15 минут, если по факту это абсолютно ничего не дало тем, у кого были проблемы с тестирующей системой? Почему не продлили на столько, сколько у вас ничего не работало? Ну 15 минут у нас задача стояла в очереди, а потом еще 25, после чего не скомпилировалась (см пункт 3), очень нам продление помогло.
6) Далее неправда, зачеркнуть не получилось. Почему у вас тур пересекается со сборами в физтехе? Как много команд из топ 25 поедут к вам посреди сборов? Лично мы не поедем посреди сборов. Или это такой неофициальный фильтр, что ждете на онсайте вы только свои команды?
Хм, интересно, а где Всесиб пересекается со сборами? Там же онсайт 7-9, а сборы — 10-21, так что все нормально. Поправьте, если я не прав)
Извиняюсь, тут я оказался упорот и перепутал
Давно такого не было, но в этом году снова Всесибирскость олимпиады показалась еще до очного тура. Да, я тоже считаю, что некорректно продлевать тур на 15 минут, когда последние минут 20 + 15 добавленных не приходили вердикты по отправленным решениям. Но, как можно заметить, это никого не удивило. Задачи? Средней годности. Как всегда, куча дабловых задач, математики и геометрии. Куда без этого, специфика ВСО. Поверьте, эта олимпиада сделала большой шаг вперед по сравнению с тем, что было с ней лет так 7 назад.
Я не организатор
1) Потому что она была до Я.Контеста (если не до яндекса, лол) ?
2) Задачки на удивление годные. Да, в большинстве своем простые, но это же отбор.
3-4) У вас просто бомбит.
6) Не пересекается же.
1) Тем хуже. Груз времен таки задавил значит.
2) Не согласен, но пусть. На вкус и цвет.
3-5) Что-то не по делу?
6) Уже написал, что не прав.
1) Почти уверен, что системой занимаются на чистом энтузиазме, разработчикам никто не платит и т.д. При этом есть своя привычная система, почему бы не проводить на ней. Да, она не очень удобная, но критичных минусов нет.
3) Не по делу. Компиляторы у всех свои.
4) Совсем не по делу. Насколько я помню, на полуфинале даже за CE два года назад давали минус.
5) По делу.
2015 год, нет поддержки c++11 <3
Вообще-то есть Visual C++ 2013. Получше даже, чем здесь.
Она есть, просто об этом нигде не написано. Надо было обратить внимание, что gcc версии 4.8.1 и на пробном туре попробовать послать что-нибудь из 11 Стандарта.
А знаете, насрать. Но может хоть задумаетесь.
Лично мы не поедем посреди сборов.
Писали бы в Яндекс.Контесте тогда. Все твои проблемы решил, обращайся.
Я может чего в этой жизни не понимаю, но люди берут и делают контесты. Контест как контест. 10 задач простых, я согласен, это перебор. Но контесты разные бывают. Люди берут и делают олимпиаду. Да, там возможно тоже все не идеально, но и денег не берут, вроде.
МИФИ вот не делает контесты и олимпиады, зато обижает людей из Новосибирска.
А из-за даблов тут на нерке некоторые пацаны в финал не поехали и не ноют.
Сначала смоги, да?
Грубый фидбек хуже отсутствия фидбека?
Да, возможно стоило попить чаю и избавиться от эмоций перед тем, как писать полотно, но сделанного не воротишь.
P.S. Про пересечение онсайта и сборов там жирным выделено, так что твой наброс не по делу, читай внимательнее, пожалуйста.
У каждого контеста есть определенный статус. Если олимпиада позиционирует себя, как Всесибирская, то она не может находиться на низком уровне, по крайней мере, не должна. И не важно, сколько платят людям, которые делают эту олимпиаду.
Абсолютно с Вами согласен! Так как МИФИ не делает контестов, то у ребят из МИФИ нет никакого права указывать на недостатки других контестов.
Как Вам такой пример: в средневековье вообще людей за еду убивали, не ныли. Какая, в сущности, разница, что было раньше? Указали на недостатки, все по факту.
1) По поводу "не умеете" оправдываться не буду. Вопрос "зачем?" не так прост, как кажется. Иначе не было бы такого количества разных систем тестирования сегодня. Да, система nsuts появилась до системы yandex.contest.
2) Да, контест простой, меня это тоже не радует, как и вас. Обычно интернет-туры всё же были посложнее. Однако это отборочный раунд, так что это не так критично. В любом случае, будем стараться приготовить нормальные задачи в очному туру. В качестве примера можно посмотреть, сколько Гена и его друзья нарешали в прошлом году.
3) Бессмысленная жалоба. Большинство тестирующих систем проводят тестирование под одной операционной системой, из-за чего компиляторы C++ неизбежно ограничиваются тем или иным набором. Такова реальность языка C++, если вы пишете на нём, учитесь пользоваться различными компиляторами. В нашем случае тестирование идёт под виндой, поэтому Visual C++ и MinGW GCC являются двумя наиболее популярными вариантами компиляторов C++. В ejudge и yandex.context тестирование идёт под линуксом, соответственно там стоит родной GCC, а Visual C++ не стоит и никогда стоять не будет. Это тоже не радует некоторых людей, как минимум меня. Однако я решал OpenCup на ejudge и не жаловался.
4) Интересный вопрос. Мне казалось, за неверный ответ на первом тесте в системе ACM тоже начисляется штраф. В официальных правилах это как-то не прописано. Возможно, мой опыт в этом вопросе безнадёжно устарел?
5) Да, в данном случае продление тура не решило проблемы, а лишь растянуло время неразберихи. Конец контеста действительно не удался. Прошу прощения за это.
По поводу 3: если выделить вот эту фразу:
то жалоба осмысленна. Если, конечно, действительно не написали о поддерживаемых компиляторах и опциях компиляции.
Большое спасибо за комментарии
Задача 5. Спортивное ориентирование. Писал дейкстру на JAVA. В графе (1_600 * 20) вершин, (1_600 * 20 * 1_600 * 2) ребер.
Получил сначала Time limit exceeded (test #32), потом Time limit exceeded (test #33). Кто-нибудь на JAVA сдавал? Или такое только на C++ заходит? Или есть более оптимальное решение?
Можно считать дейкстру 10 раз на графе с 1600 вершинами и 16002 рёбрами
У меня на джаве сразу зашло: 20 дейкстр на графе 16002 рёбер. Главное — писать за n2 + m, а не за .
19 тест в задаче 3. Что это?
У нас 19й не заходил из-за мелкого бага с циклами
А какая именно бага?
для этого нужно объяснять именно наше решение) мы все компоненты сильной связности объединяли в одну новую вершину, неправильно пернаправляли старые ребра, точнее: не все.
По задаче 1 посылка в 14:23:43 (MinGW C++ (GCC 4.8.1)) получила WA1. При изменении вывода long double на double (через cout) и установки cout.precision(6) вместо 10 решение зашло. Больше ничего не менялось. Почему при увеличении точности решение может перестать проходить? Посмотрите, пожалуйста.
Нам в кларах указали "MinGW неправильно работает с выводом long double. "
А всё почему? Потому что стандартная сборка MinGW безумно устарела и надо переходить на TDM-GCC или что-то похожее.
Да, есть такое в планах. Там заодно и со всякими to_string проблема решится.
Интересно, насколько вариант TDM-GCC популярен в олимпиадном программировании?
Не так много систем использует винду. Эта сборка gcc точно используется на Codeforces и с недавнего времени на внутренних тренировках и чемпионатах СПбГУ.
Я стараюсь убедить своих коллег-олимпиадников в том, что long double — зло, но пока не получается =) Вот смотрите сами:
На Visual C++ 10-байтового long double нет, там этот тип эквивалентен double. И это вполне укладывается в стандарты C/C++ =)
Под MinGW, как мы выяснили, long double не всегда нормально работает.
GCC честно компилирует long double в операции над 10-байтовыми вещественными числами сопроцессора FPU (x87). Это древний набор инструкций, который был заменён уже дважды: сначала SSE/SSE2, а потом ещё AVX, в которых 10-байтовой точности нет. Где-то я слышал слухи о том, что на 64-битной архитектуре x87 объявили deprecated, хотя подтверждений этому найти не могу.
Ну и естественно, поддержка long double требует оригинальных решений на всех уровнях. В компиляторе нужно оперировать со словами размера 10 (не степень 2, не делится на 4), в результате чего размер long double вырастает до 12 или 16 байт. На уровне процессора нужно предсказывать, куда приедет какой операнд на FPU стэке. Естественно, когда FPU появлялся, никому это не казалось проблемой, ведь об out-of-order execution, без которого сегодня процессор работать быстро просто не может, никто не подумал.
Как решать 7-ю? У нас WA 23 (это вроде первый тест после семплов, где нужно искать касательную). Код несколько раз перечитывали, бага не ищется =(
Нужно учитывать, что кратчайший путь — не всегда отрезок и две дуги параболы. В тесте 23 кратчайший путь — по отрезку (не вертикальному).
Мы у Олега попросили тест:
Там картинка выглядит так:
Ответ — AB, а отрезок касательной CD. Мы правильно поняли, что ответ — идти не по отрезку касательной, а что надо его загнать в полосу, но чутка неправильно это делали.
Ага, мне уже дали тест, и я уже досдал. В каком-то совсем простом месте l и r перепутал, досадная бага =(
So what is the solution? (In english please?)
There are 4 possible cases:
Привет авторам задачи "Ставки" от всех, кто не запихал это дело. Если честно, задача очень и очень плохая (или у меня руки совсем не из того места растут), так как не сдалось даже не бигинтах на джаве (ВА 9).
Привет. Задача — боянище тысячелетней давности.
Надо определить, верно ли неравенство
1/a + 1/b + 1/c < 1
.http://ideone.com/xeIW1P
оО у нас без
+0.5
не заходило, в чем магия?a * 100000 может округлиться как в одну, так и в другую сторону, потому что число a до умножения может не иметь точного представления в двоичной системе счисления.
м-да, честно говоря, я верил в то, что первые N цифр (до точки + после точки) поддерживаются всегда точно.
Спасибо!
Это верно только в двоичной системе. Уже 0.2 представляются в двоичной системе периодической дробью.
Ньюфаги не знают: http://ideone.com/wpPzsE
(это был взлом на одном из древнейших раундов)
1582. Букмекеры
Вот этот боян =)
Ну да, мы решение придумали, но сравнение как-то через одно место получилось.
Там же long long хватает. Нужно просто сравнить с 1 или c , теперь всё целочисленное, считаем дробь и сравниваем стандартно.
Почему бы не сделать честно и не прочитать ТОЧНО с помощью строк и перевести в i64 *10^5.
Была такая мысль, но посчитал совсем уж извращением.
Привет :) Автором задачи "Ставки" был я, хотя, как уже написали выше, она оказалась баяном :(
По решению: с математической точки зрения задача простая и формула выводится несложно. А вот с точки зрения программирования у команд возникли две проблемы при работе с вещественными числами:
Поскольку деление даблов даёт погрешность, а нас определять ответ просят точно, то считать здесь надо в целых числах (например, сами числа домножить на 105, а в неравенство домножить на wdl), либо использовать что-нибудь точнее double (например, в той же джаве есть BigDecimal).
Вещественные числа представляются таким образом, что даже числа с небольшим количеством знаков до и после точки будут храниться с погрешностью (выше есть один из самых простых примеров: 0.29), поэтому читать и преобразовывать к int'y их надо аккуратно.
Расскажите пожалуйста как выводится формула? Я воспользовался вольфрамом, и он выплюнул немного другую. Но всё же хочется узнать нормальное решение.
a, b, c — даны, найдем такие x, y, z, что выполняются неравенства
=>>>
=>>>
D — произвольное положительное, возьмем, например, D = 1 и получим то, что хотели.
Для полного доказательство: x = D/a + eps, y = D/b + eps, z = D/c + eps, eps > 0
x + y + z = D/a+D/b+D/c+3*eps = D
если D/a+D/b+D/c < D то можно найти такой eps.
как решать 4-ю?
Перебираем бин. поиском ответ. Дальше отсортируем цепи по удельной массе и будем жадно набирать макс. возможную длину, начиная от меньшей массы к большей.
1152 засыла по "ставкам" :) и всего 65 аксептов :)
Где можно прочитать официальные правила соревнования?
http://olimpic.nsu.ru/widesiberia/2015/info
Это я видел :) Это как-то слабо напоминает правила, ну да ладно.
Основной страницей олимпиады можно считать http://olimpic.nsu.ru/widesiberia/2015/news и все те ссылки, откуда с этой страницы можно уйти. Или интересует какой-то конкретный вопрос, на который нет ответа в положении?
Есть ли ограничение на кол-во команд от вуза? В прошлом году были, а сейчас про это ничего.
Для "Европейских" вузов (до Урала) есть ограничение не более 2 команд от вуза.
Для "Сибирских" вузов (Урал и восточнее) ограничений на число команд нет.
А вы в каждом году отдельно выбираете, относить Урал к Сибири или нет?) И по какому критерию?)
Я правильно понимаю, что допускаются команды, которые являются сборными разных вузов? Формально правила можно интерпретировать так.
Да, сборные команды из разных вузов допускаются.
Как тогда распространяется квота на вузы на эту команду? И почему нашу команду с 11 задачами на 9 месте отправили в список запасных? :(
А когда будут выложены списки приглашенных команд?
Список приглашённых команд появился здесь.
где можно дорешать задачи?
Потом дорешка откроется. Там же.
А на opencup уже давно открыта. Задачи-то те же.
Открыл дорешивание в олимпиаде "Тренировки".
Немного о том, как в него попасть. Допустим, вы уже зашли в nsuts. Кликаете на название олимпиады "XVI Открытая Всесибирская олимпиада по программированию имени И В Поттосина" в правом верхнем углу, дальше выбираете олимпиаду "Тренировки". Если её нет в списке, регистрируйтесь на неё (ссылка ниже списка олимпиад). Дальше выбираете тур "Интернет-тур XVI Всесибирской олимпиады: дорешивание", и можно сдавать.
Конечно, можно также сдавать в дорешивание OpenCup-а.
Как решать 8? Пытался перебрать все варианты, однако не совсем работало( Объясните пожалуйста как решать
f[i][s][fl] — максимальное количество различных цветов, после того как посмотрели первые i, набрали сумму s, fl == 0, если раньше такой цвет не брали, и fl == 1, если брали.
Сортируешь цветы по типу. Пишешь обычный рюкзак, но кроме dp[w] хранишь еще и last[w] — последний используемый тип для набора цветков на сумму w.
Is there any good implementation of problem J?
I don't like my implementation. It cost me 2 hours in total.
Будет ли этот контест выложен в тренировки?
Подскажите, как же решать задачу Плэй-офф из див2?
Построим граф в явном виде. Теперь на запрос АB отвечаем так: пытаемся пройти от A к корню, если на пути есть B, значит, что B сильнее А, аналогично идем от B к корню и пытаемся найти А, тогда А будет сильнее. Если ничего не получилось, выводим "Unknown".
Если Вас не затруднит, покажите код. Спасибо.
http://vpaste.net/TQZCq
[ DELETE такой пост уже был =) ]
есть табличка с текущими результатами в I номинации?
Результаты 1 номинации
Может, тогда и есть результаты II номинации?
Результаты
А в 5-й решение быстрее O(N2 * M2)?
У нас O(n2m2). Можно прикрутить быстрое умножение многочленов, наверное, но вряд ли это хоть сколько-то улучшит время работы.
а зачем, итак проходит за 210ms
задача 3. у меня зашедшее решение (n^2 с отсечениями) очень плохо работает на тесте генерируемом этим генератором
Может тогда стоит ещё и решение в пост добавить, а то как-то не информативно :)
Решение:
Расскажите, пожалуйста, как решать задачу 3?
Сожмем компоненты СС. Так же как в транзитивном замыкании за O(nm / 64), только храним не битсет со всеми вершинами, а только с 64. Запускаем n / 64 раза.
P.S. Конечно же, ответа либо нет, либо это граф из уже заданных отношений первого типа.
На самом деле 64 — плохой выбор. Гораздо лучше делать битсеты существенно большего размера. Оптимальный вариант — 8 КБит.
А сколько авторское на Яндексе работает, у нас 1.7с
У меня на компе моё решение с размером блока 8К работает 1.7 сек, а с размером 64 работает 8.7 сек. Конечно, в нём получается цикл длины два, так что работать может несколько медленно. Кроме того, у нас на Всесибе компиляторы все 32-битные, а в yandex.context, что-то мне подсказывает, есть 64-битные, и int64 работает весь целиком.
Вот, что сдали команды из СПбГу
Добавляем все ребра первого типа. На новом графе нужно проверить, есть ли пара вершин, между которыми есть путь.
Конденсация + N^2 / 32. В память все не влезало, поэтому нужно было по слоям считать битмаски.
Видимо число 32 в эпиграфе было не просто так :)
А расскажите, кто-нибудь умеет объяснять, почему эта задача не проще, чем reachability problem? Или, наоборот, приводить решение за время лучше O(VE / 32 + Q)? У меня было очень стойкое ощущение, что можно как-то воспользоваться спецификой, что нам не нужны точные ответы на каждый запрос, а надо только узнать, есть ли хотя бы одна из данных достижимостей, но довести ни до чего не удалось.
Вот решение от какой-то из команд АУ.
"и есть внезапно честное решение за n+m от АУ: вот есть запросы: путь u_i -> v_i не существует добавим в граф рёбра v_i -> u_i и назовём их красными тогда нужно проверить, что в сконденсированном графе нет ни одного цикла с ровно одним красным ребром и они вроде доказали, что честный dfs этот цикл найдёт, если он есть.
сначала по обычным ребрам бежать нужно"
А поподробнее про то, как детектить цикл с единственным красным ребром можно?
Авторы говорят, что нашли контртест.
Я умею сводить dynamic strong connectivity, если на все вопросы второго типа добавлять обратное ребро из b в a, запрос на принадлежность одной КСС, и удаление этого ребра. Но я понятия не имею, можно ли ее решать быстрее.
UPD Видимо, я их не так понял.
Казалось бы, это неправда, например возьмем граф из трех вершин без ребер. И сделаем из ребер второго типа цикл.
PS. Если это действительно заходило, то авторам тестов -100 к уважению.
Если я правильно понимаю, то точно такое решение жюри в своё время тоже придумало, как и некоторые участники. Естественно, на него был тест, оно не проходило.
Ну в таком виде точно неверно. Пусть граф состоит из четырех вершин, есть ребра (1, 2) и (3, 4), и запросы достижимости из 2 в 3 и из 4 в 1. Тогда в названном графе будет цикл, хотя этих достижимостей нет.
в 5ой задаче WA 9. ни у кого не было?
Скорее всего, несколько раз считается одно и то же выражение. Например, выражение 1 + 1 + 1 является корректным, но если неаккуратно написать динамику, то оно посчитается два раза (когда "внешним" является первый плюс и когда "внешним" является второй плюс).
да, действительно, спасибо
Как решается задача 11 (Побочные эффекты) и задача B. Painting Tracks из див2.(о полосах из прямоугольников). Спасибо.
11 — добавляем обратные дуги из ввода вместо прямых. Если добавилась дуга из черной в белую, то запускаемся дфсом из черной и красим рекурсивно все встретившиеся на пути белые. Таким образом, каждая белая вершина покрасится только один раз -> O(N).
upd: забыл сказать, что внутри дфса надо удалять дуги из черных вершин, иначе будет квадрат. Видимо, поэтому заминусовали :)
Как решать 8? Кто-нибудь упихнул fft?
У нас FFT получает TL 1 :)
Нужно объединить отрезки (получится снова набор отрезков, но теперь они не пересекаются). Пара отрезок + переход даёт +1 какому-то отрезку сдвигов. Нужно на этот отрезок прибавить +1, а потом найти лучшую точку. Прибавлять на отрезок можно в оффлайне префиксными суммами.
Зачем fft? :) Для начала избавимся от пересекающихся и касающихся отрезков, объединив их. Представим себе, что мы взяли и все перекрёстки унесли куда-то далеко влево и начинаем перемещать их направо. Как только одна точка попадает в отрезок, тогда к счётчику +1, как только выходит — -1. Соберём все такие события, отсортируем (можно подсчётом), пройдёмся, найдём максимум. Ну и не забудем, что иногда хорошо не двигать вообще ничего.
Потому что сразу не заметил n <= 1000, m <= 10000, но заметил a[i] <= 1000000
Об FFT мы подумали только в пятницу =)
На самом деле, ограничения были не в пользу FFT. Если увеличить N и M, а также уменьшить L, то получилась бы задача на FFT. Но увы =)
увыураКак решать 5 задачу(про арифметическое выражение)?
Две динамики от двух параметров -- длина и остаток по модулю. Первая -- количество выражений, второе -- количество атомов (чисел или выражений в скобках). Для того, чтобы получить выражение длины N, перебираем длину первого атома K и получаем переход вида
И не забыть про выражения вида ((((1+2)))).
а разве не будут выражения типа 1+1+1 учитываться по нескольку раз?(мы можем прибавить к выражеию (1+1)+1, а можем 1+(1+1))
у меня была похожая динамика(только без атомов),
dp[i][j] += dp[k][m1] * dp[i - k - 1][+/-(j - m1)]
И я не совсем понял, для чего атомы(и как они считаются)
и там(в формуле) умножить или складывать надо?
Выражения (1+1)+1 и 1+(1+1) считаются различными. Атомы нужны как раз для того, чтобы каждое из этих выражений посчитать отдельно: по первому атому формула определяется однозначно.
Да, умножить надо, конечно. Поправил.
Я имел ввиду, что в выражение 1+1+1 можно посчитать двумя способами(вначале к первым двум прибавить третье, либо к первому прибавить второе и третье. Не будет ли это считаться как два разных способа?)
1+1+1 не будет считаться как 1+[1+1], поскольку второе слагаемое должно быть неделимым (атомом), в то время как вариант [1+1]+1 — правильный
аа, все, понял(только в решении
UPD неправильно понял
А зачем две динамики, когда можно обойтись одной? Первое слагаемое всегда либо число либо, либо что-то окруженное скобками.
Да, хватит одной, логично. Меня почему-то сначала это решение смутило, я решил не задумываться на всякий случай.
да, спасибо, зашла задача(правда, я использовал одну динамику)
А есть у кого-нибудь итоговая табличка (может, в виде фотки с закрытия) -- для тех, кто улетел утром?
Таблицу даже на закрытии не показали :(
Результаты первой номинации
Результаты второй номинации
А сумма за две номинации?
Сумма по двум номинациям, подсчитанная в соответствии с правилами 2015 года. Для сравнения приведён подсчёт по сумме мест (place1+2*place2), которая была в 2014 году.
Мы тут подумали над нашим феерическим выступлением немного и поняли, что в задаче А сдали неверное решение. А именно, вместо выкидывания двух вершин и проверки на двудольность мы выкидывали два ребра и проверяли на двудольность (ребра выбирали только из найденного нечетного цикла). Это не работает на тесте с полным двудольным графом, к которому прицеплены одна или две вершины, соединенные со всеми вершинами этого двудольного графа. Как-то странно, что у авторов не было такого теста О_о