Вы видите копию треда, сохраненную 25 июля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Основные ресурсы с задачками:
codeforces.com - Клевый проект, чуть ли не еженедельные контесты. Система писькомерства рейтинга уровня ELO с Короткевичем 4к+. Задачки своеобразные, пилятся комьюнити, мало общего с задачками стандартного ACM, что продиктовано форматом соревнований. Так же codeforces выбирают площадкой для множества престижных соревнований уровня VK Cup, в тренировки заливаются все крупные контесты оффлайн.
acm.timus.ru - великолепный архив. Решишь 500 задач на тимусе - будешь гарантированно красным на кфе
informatics.mccme.ru - хорош для новичков
Дальше идут ресурсы, которые оп не юзал особенно по своему скудоумию:
acmp.ru - ничего сказать пока не могу
TopCoder.com - пендосский codeforces, регулярные контесты, открытые турниры и тому подобное
e-olymp.com - не знаю
F. A. Q.
Что почитать?
Грэхэм, Кнут, Паташник "Конкретная математика"
Кормен "Алгоритмы. Построение и анализ"
...
Как вкатиться?
Читай книжки сверху, и решай как можно больше
Шапка за пять минут, надеюсь треду жить, принимаются предложения по оформлению
>>706304 (OP)
Да, про теорию я, кстати, забыл.
http://hecs.info - поделка школьников - олимпиадников, попытка собрать все в одном месте
http://e-maxx.ru - великолепный ресурс, кладезь понятнейших описаний алгоритмов и структур данных
http://neerc.ifmo.ru/wiki - описания более академичны
http://wikipedia.org - как ни странно, алгоритмы в статьях на русском языке представлены очень и очень неплохо
Достаточно много полезной информации можно получить из блогов на ресурсах из шапки. Информации не только по решению задач, но и по сопутствующим темам вроде стратегии на контесте и т.п.
Деревья не нужны. Сделай массив частичных сумм s = a[1] + a[2] + ... + a
С помощью них вычислить сумму отрезка m..n можно как s[n] - s[m-1].
Массив у тебя отсортирован, и это надо использовать. Благодаря упорядоченности сумма отрезка будет монотонно возрастать по мере сдвигания начала отрезка к концу массива. Похоже тут у нас работка для бинарного поиска.
Ладно, я переусердствовал. Спасибо
Если точно задана длина отрезка и нужна сумма, то высчитываешь среднее (сумму делишь на длину отрезка). Находишь в массиве это число или ближайшее меньшее. Это число будет концом отрезка - проходишь к началу массива на нужное количество элементов и высчитываешь сумму (сам отрезок не нужно хранить - только сумму и индекс конца). Проверяешь сумму - если равна то все. Если меньше то сдвигаешь отрезок - увеличиваешь индекс конца, прибавляешь к сумме новый елемент и вычитаешь старый (тот что вылетел). Снова проверяешь сумму и если надо повторяешь. Если сумма стала больше искомой то отрезка нет. Правда сложность сложно определить, она зависит от скорости роста значений елементов массива.
У тебя нет гарантии на то сколько тебе времени прийдется двигать отрезок. Можно (скорее всего) подобрать такие входные данные что бинарным поиском найдешь конец отрезка в самом начале массива и потом будешь двигать в самый конец, тоесть в худшем случае получается m n logn, но для этого значения в массиве должны почти не изменятся. А если значения более-менее возрастают то тогда да, получается m logn. Для худшего случая можно как-то модифицировать алгоритм, например двигать отрезок не сразу по одному элементу, а например, после первого найденого (бинарным поиском) елемента, начать от него перескакивать сразу на несколько десятком или сотен (в зависимости от размера) элементов пока не убедимся что дальше сумма больше - и тогда уже можно искать точнее сдвигая по одному элементу.
Бамп вопросу.
В смысле "расписания"? На хаккерранке соревнования тоже по расписанию. Есть задачи которые проссто можно решать - но на КФ тоже же (вроде) можно.
Да, на кфе перманентно доступен архив со ВСЕМИ задачами прошедших соревнований
Стоит ли тратить на это время, если мне не нравится этим заниматься? Скажем, для того чтобы показывать работодателям и все такое?
Нет, это просто обычное хобби. Бывает, на собеседованиях что-то олимпиадное дают, но обычно самое простое. Работодателю даже более интересно будет посмотреть, как ты будешь пытаться решить, а если ты ему сходу алгоритм выдашь уже известный тебе по каким-то причинам, то все скучно
У меня сосед был, с 7-го класса брал призера, а в 11-м победителя. Как-то писал КФ при мне, решил то ли 3 задачи, то ли 2. Может, конечно, несерьезно подошел.
На кфе немного своя специфика-таки. И времени меньше, и задачи менее идейные. Есть знакомый математик, который в девятом классе выиграл всерос по математике, решив там все задачи. По программированию он тоже на всерос ездит и берет там призерство за счет идейных задач. Я даже не уверен, напишет ли он сам Декартку или ДО
https://www.hackerrank.com/challenges/find-median-1
https://ideone.com/WKvtSb
Представь граф, в котором все команды - вершины, а рёбра соединяют команды, сыгравшие друг с другом хотя бы один матч.
Теперь забудь про этот граф. Тебе понадобится другой - в котором ребра соединяют команды, НЕ игравшие друг с другом.
В этом втором графе тебе надо найти связный подграф размера K.
Пишешь Брона-Кербоша, с тем отличием, что тебе надо находить не максимальный связный подграф, а первый попавшийся размера K.
Эх, пока не мой уровень. Но попробую накостылить.
3 курс ФИВТ МФТИ, преподает в Мытищинской школе программистов, уже год вроде. 3-х учеников поднял до финалистов - победитель/призер/призер.
Может уже и перебрался куда, связи не имею с ним.
Это всерос 2013?
Ну вообще я надеялся, что там до бектрекинга не дойдёт. Но ты прав, на это полагаться нельзя.
Надо использовать тот факт, что у каждой вершины 2 ребра. Это значит, что граф целиком состоит из циклов.
Надо найти все циклы, и из каждого убрать по одному элементу.
То есть не убрать по одному элементу, а брать через один.
Как тут вообще строить граф по стольким данным? 100000 матчей - это 50000 команд. По идее тут не пройдут алгоритмы хуже линии.
Может какая хитрая маска.
Кстати, может быть так, что пара команд играла друг с другом в обоих раундах.
Берёшь случайную вершину V1, произвольно выбираешь одно из её рёбер. Переходишь по этому ребру в V2.
У V2 два ребра. По одному ты пришёл, а другое ведёт куда-то ещё. Переходишь по второму ребру и т.д.
Рано или поздно ты вернёшься в V1. Это значит цикл замкнулся.
Частный случай - цикл длины 2. Но да, может поломать алгоритм, если ты не предусмотрел это.
Как ты его хранить будешь, скажи для начала. Вектор векторов или 2д-массив булов? Размер инверсированного графа в любом случае будет 50000*50000=2500000000=2.5 гига. Я про это писал.
Про Брона-Кербоша идея неудачная, как правильно заметил >>707184
Но не потому что проблема представить граф. Его на самом деле не надо хранить в явном виде. Достаточно хранить комплементарный граф
>в котором все команды - вершины, а рёбра соединяют команды, сыгравшие друг с другом хотя бы один матч
Это будет просто другое представление графа в памяти. Все нужные операции можно делать и с таким представлением.
Блин, точняк. Тупо идти через один. С поправкой на не входящие в основной остов пары. Стало понятно, когда представил граф.
А какой сложности вообще задания на олимпиадах по той же шкале acmp? Сам определить не могу.
Варьируются. Обычно есть и та задача, которую должны решить все, и та, которую вероятнее всего не решит никто
else if (max_heap.size() > min_heap.size())
return max_heap.top();
else
return min_heap.top();
из нижней части нужен максимальный элемент, а из верхней минимальный. А ты берёшь из обоих максимальный.
На самом деле тут достаточно очереди для верхней половины списка и одного значения для нижней. Первые (n-2)/2 элементов не могут повлиять на результат, их не надо хранить.
Ну а средняя часть между этими 2 задачами? Вообще какой сложности я должен уметь решать, чтобы дойти до полуфинала acm.
мимо ещё ньюфаг
Ой, чёт показалось, что входной список отсортирован. Последнее предложение можно игнорировать.
Намного приятнее было писать всеросс, организация на высоте, соревнование не предполагало знания какого-то конкретного ЯПа, интересная система начисления баллов. Хоть тут победителя получил.
Краевой - это хуйня. И она тебе никаких льгот не даст. Призер заключительного = поступление в любой вуз БВИ.
Пока только наброски идеи и правил: https://my.mixtape.moe/osxgjw.txt
Критика (кроме сообщений о кривой кодировке) приветствуется.
Кодировка кривая
Иди покакай.
и я о том же. поэтому и готовился к всесибу (собираюсь в НГУ). задачи к слову были куда проще, чем на всероссе, даже краевом. знания алгоритма рекурсивной заливки и флойда-уоршела хватило бы для решения всех задач, остальные "идейные". теперь только егэ сдавать на 100, и все в тот же нгу.
думал про МАИ, но жить и работать хочу в Новосибирске, например в ДубльГис. Сейчас вот думаю какой из двух вузов выбрать: НГУ или НГТУ
Как понять нет денег на всеросс ехать? У кого нет денег? Поступай в УрФУ вместо москвы, там очень крутой тренер асмщик Миша. В Москве ты не пробьешься в команды.
денег нет доехать до Москвы. я живу в Алтайском крае, тут билеты до Москвы стоят 2 месячные зарплаты. И я не планирую дальше заниматься acm, раньше рассматривал только как способ поступления в топовый вуз, например НГУ
Скорее всего, он не прошел.
Оплачивает регион, так что всегда находятся регионы, откуда за свои едут.
А теперь кто?
какой уровень у тебя был? к чему сейчас пришел?
полезная вещь в плане освоения некоторых тонкостей языков, навыков поиска багов, доказательства решений и знания алгоритмов но действительно дрочка
почти бывший олимпиадник
Да ни в каком, ясное дело, но спортивное программирование уж слишком узкая область. Становится тесно и скучно.
Да. Дельта рейтинга зависит от рейтинга участников, которых ты опередил. Был баг, что сам участник всегда был в этом списке. И турист всегда фактически обыгрывал чела с 4000+ рейтинга.
Прикольнее быть сыном олигарха.
Зато у него есть девушка, а у тебя нет))0)
Чёт в голосяндру с тебя
Лол, там чтобы чёртову футболку получить надо быть где-то на уровне призёра всероса. иди вон из треда
Потому что и то, и другое являются интеллектуальными занятиями. Нередко бывает, что олимпиадники-предметники играют в ЧГК, шахматы или еще что подобное.
Программист-олимпиадник, неплохо играю в шахматы, в ЧГК тащу с командой.
Вещи эти не сильно связаны между собой. Тут скорее объединяет общий вопрос: любишь думать?
ЧГК - рилейтед хобби, потому что в обоих занятиях решает уровень абстракции мышления
Шахматы - дроч схем, дебютов, эндшпилей, мидшпелей. Творчества там не осталось. На высоком уровне играют до ошибки соперника
Топ500 это в 3 раунд, футболка топ1000, по крайней мере, в том году так было.
>дроч схем, дебютов, эндшпилей, мидшпелей.
А как же шахматы Фишера, не слышал что ли? Даже в нашей деревне в них в школе рубились, чтобы вывести на чистую воду соперника, который постоянно одной и той же тактики придерживался.
Ну вот прикинь, готовится моё собеседование в Яндекс. Тут дверь распахивается, и вхожу я в футболке от Гугла.
Я и такое не могу решить. А вообще бывают кто стал неплох в асм своими силами без кружков, тренеров и универов?
Как ты представляешь участие в студенческой олимпиаде без универов?
И что считается "неплох"?
ахуенно же. яб вдул
А в чём проблема? Не футболке самого яндекса же.
На кфе должно быть достаточно таких "вылезаторов"
Ты бы хоть форум codeforces почитал, там половина околокрасных это подпивасные самоучки. а другая половина - школьники, лол
Очки протри, лол. Русских вверху рейтинга полно. D-large хоть правильно решил? Все остальное примитивно совсем.
За счёт того что у меня все большие оказались решены правильно, а у некоторых нет я где-то на 20 мест поднялся при финализации результатов.
Ну пиздец.
Вижу в прошедших контестах VK Cup 2016 и VK Cup 2016 - Round 1. При этом напротив "VK Cup 2016 - Уайлд-кард раунд 1" активна кнопка зарегистрироваться. Что это значит, я всё-таки могу участвовать?
Лезу читать детали, раскапываю что требуемый возраст от 14 до 23, да и вообще я со своим пустым профилем иду лесом.
Зачем прятать эту информацию так далеко? Почему нельзя убрать кнопку "зарегистрироваться" у тех, кто не проходит по условиям?
I am dissapoint.
Ещё и моих любимых языков нет в их списке. Ну нафиг этот codeforces.
VisualBasic, perl
Я вообще первый раунд не писал. За меня отдувался сокомандник, но он вообще серый, лол. Почти, кстати, прошел
На кфе пустой профиль пока.
Занимался в универе не слишком активно, потом работал программером 3 года. Год назад контора закрылась. Надрачивался в основном последний год.
Дишка есть, надо попробовать.
Я это и имел в виду, проебал это мы просто забили. Так пока раунд нормально идёт.
Поздравляю
У меня просто сокомандник даун. Вот вообще не помогал. Печально. Интересно, что и где пишут на этом языке
т.е. вместо массива и следующих за ним запросов нам даются только запросы с ответами на них, и по этим данным должен дать подходящий вариант массива
Ну если навскидку, то идёшь по индексам массива, для каждого индекса проверяешь в какие ренджи он попадает, и пишешь наибольший из их максимумов.
*минимумов
запросы
Я бы сделал два мапа, оба с ключом по индекса. Один - ренджи в которые ты входишь на этом индексе, другой - из которых выходишь.
Собственно, прямой перевод: сканирующая прямая.
Короче, я имел в виду сортировку запросов, и дальше мы идём по индексу итогового ответа и поддерживаем текущие запросы, по ним строим число в этом месте или говорим, что ответа нет
Есть полоса из клеток. У каждой клетки приз за то, что наступаешь в нее. Есть k шагов. Каждый ход идем в клетку, которая лежит в х клетот слева, или в y справа, либо вовсе остаемся на месте и снова получаем очки, будто мы только что пришли в эту клетку. Теперь надо максимизировать наш счет
Черт, только что подумал. Может, это тупой рекурсией зайдет? Вечером ограничения уточню
Вроде обычная двухмерная динамика по индексу клетки и по номеру хода, очередной ход пересчитывается через предыдущий. Здесь, почти как и в любой динамике, прокатит рекурсия с мемоизацией.
Я понимаю, что это динамика, что двумерная. А вот как переход делать не догоняю
Не прибавляем, а обновляем значение, если новое больше старого, или если D[M+1][K-x] было не инициализировано.
Да и на D[M][K] надо для начала посмотреть, инициализировано ли оно.
Ну да, обновляем. Смотреть никуда не надо, просто сначала нормально инициализировать динамику нужно и всё.
Давай рассказывай как его правильно запускать чтобы я мозги не ебал.
Тащемта никакого секрета тут нет. Просто берёшь и запускаешь без задней мысли.
Нулями некорректно. После первого хода ты можешь достичь 3-х ячеек, а с нулями будет выглядеть будто ты оказался и в этих трёх, заработав сколько-то, и достиг всег остальных, заработав 0.
-INF можно, но некрасиво.
null самое то.
На олимпиадах красота никого не интересует... Что нулями некорректно, я отлично понимаю, просто сказал два самых частых решения. Ещё иногда -1 используется, вместо null.
Ты серьёзно сел разбираться с этим говном?
>>713985
Короткевич с Бардашевичем так то крутыми выглядят , особенно с наградами в руках, телки любят таких
Ну где они, а где мы... Другое дело, что я вижу много успешных ребят, вышедших из школьной олимпиадной тусовки.
>>713878
Спасибо огромное, но не объясните ли вы, почему этот алгоритм не вырождается в обычную жадность? Разве мы не локально для каждого прыжка выбираем самый выгодный ход?
А ты условие объясни сначала. Мы из любой клетки можем начинать или как, ограничения какие, это всё важно.
Интуитивно можно пояснить, что алгоритм не вырождается в жадность, потому что при количество_ходов->∞ самая выгодная стратегия это кратчайшим путём добраться до максимально выгодной клетки и стоять там. При уменьшении количества ходов сначала решение может перейти в поход до самой выгодной клетки по самому выгодному пути, при дальнейшем уменьшении уже вообще непонятно что будет, всё ближе и ближе к результатам жадного алгоритма. Надеюсь, стало чуть более понятно, я имею опыт только таких полуинтуитивных догадок, почему в одной задаче жадник, а в другой динамика.
Закрой ты уже доки по J, в самом деле, и забудь о нём навсегда.
Я понимаю, почему эту задачу не решить жадностью, но не понимаю, почему работает такая динамика, где мы просто каждый ход выбираем самый выгодный следующий
Что не так с J?
О, это уже намного проще пояснить. Сначала, очевидный факт, что решение для N шагов зависит только от решения для N-1 шагов. Дальше ты доказываешь корректность перехода так: во-первых, такой переход не ухудшает ответ, во-вторых, лучше сделать нельзя, следовательно, он оптимальный.
Это совсем кратко, но в общем это схема типичного доказательства перехода.
он отвратителен, его синтаксис не для людей
Для хардкорной практики придумывания и доказательства динамики есть прекрасная задача "Казино": всерос 2005, финал, день 1, задача С; №11 на informatics.mccme.ru.
Ага, гляну. А еще такой вопрос. Мне для следующей итерации, какую клетку считать новой стартовой? Неужели просто ту, на которой я отхвачу максимум очков в предыдущей итерации?
Ты не понял сути. В ДП ты идёшь по всем путям одновременно, шаг за шагом.
Стартовыми будут все клетки полученные на предыдущей итерации.
Да, я уже написал. Каждый раз загоняю в вектор возможные стартовые клетки и от них стартую. Ва на тесте 8 - это на что похоже? Переменные, где может быть переполнение, вроде уже проверил
Зачем ты их загоняешь куда-то?? У тебя есть массив динамики, сначала ты инициализируешь позиции перед первым ходом как надо, например, в нужные клетки ставишь 0, в остальные -INF. Тогда при пересчёте ты вообще не паришься, пути из неправильных клеток всё равно дадут отрицательные значения и в ответ не попадут. Только тогда надо учесть, что все состояния динамики на каждый ход надо тоже сначала поставить -INF.
Действительно. Получил AC. Надо, короче, нарешивать динамику, а то ни один нормальный контест без нее не обходится
Если нам задан выпуклый многоугольник координатами его вершин вдоль обхода, то как найти самую длинную диагональ быстрее, чем за квадрат?
Берем две(или три если точки трехмерные) оси (90 град одна относительно другой), проецируем на них все точки. Ищем на осях крайние точки - это будет потенциальные длинейшие диагонали.
За какое время такой алгоритм? Линейное?
Может и не будут.
Наверно пару осей нужно взять из первой и средней грани предварительно проверив их на сонаправленость.
Ну вот контрпример на оба случая. Если A и B это p[0] и p[1], то проверка ничем не будет отличаться от первого варианта что ты предложил.
Засада. Предлагаю вбить костылей и добавить еще две оси по 45 град. к первым. Инфа 146% этого точно должно хватить!
Хотя может лучше из рандомной грани оси брать. Полик выпуклый - значит примерно на 1/4 граней приходится поворот на 90 град. Значит оптимально, брать перую, n*1/4 и их перпедикуляры.
Скорее всего если взять какую-то вершину, и потом по очереди смотреть длины диагоналей по очереди, то они будут сначала расти а потом падать (на выпуклом многоугольнике). Тоесть можно искать чем-то типа бинарного поиска.
Но искать придется для каждой вершины же.
Опередил.
>Зачем изобретать велосипед?
Интересно же. Потом когда кора одеревенеет, тогда и можно сразу в гугол.
Берём любую вершину, ищем для неё противоположную. Дальше, из очевидных соображений, если мы первую вершину сдвинем на 1 по часовой (то есть возьмём следующую вершину), то для этой вершины ответом будет являться либо уже найденная противоположная, либо эту противоположную надо будет так же сдвигать по часовой стрелке. Таким образом, если у нас есть список вершин в порядке обхода по часовой стрелке, то нахождение диагонали занимает линейное время, так как первая вершина пройдёт полный оборот, и противоположная ей суммарно пройдёт тоже ровно 1 оборот.
Обход по часовой стрелке строится за O(NlogN) построением выпуклой оболочки, например, хотя может оказаться, что это пушка по воробьям и тут можно проще.
Напоминаю, что уже идёт раунд 1А Google Code Jam.
Решил первые две. Долго тупил над второй, и на третью не хватило времени.
Хотя понял её быстрее чем вторую.
Убираем тех, в кого нет входа, в оставшемся графе находим петли.
Посадить в круг можно либо петлю в полном составе, либо пару + входящие в неё с каждой стороны цепочки.
Мне казалось, что надо восстановить сетку полностью.
Где-то час я ломал голову как это сделать. Пытался рекурсией - убираем первый столбец и первую строку, и решаем меньшую задачу. Но соснул на этом пути.
Тоже не прошёл, решил всё кроме Clarge, потом просто смотрел, как с 700 места медленно съезжаю вниз.
Ну хватит уже.jpg
Пост не вброс. Просто никогда не занимался олимпиадным погроммированием.
Занимаюсь олимпиадной прогой 5 лет, по сути, так и попал в программирование. Мне это помогло научиться программировать, искать баги, писать код нормально и понятно (потому что как раз на олимпиадках пишешь код настолько блевотно, что больше никогда так делать не хочется, и понимаешь, что никто это не поймёт даже через 5 минут). Алгоритмы дали понимание оптимизации программ, использование оптимальных структур, понимание вообще как это работает в глубине, желание сделать покрасивее и в то же время быстро рабочим. В целом, ящитаю несколько лет олимпиадной проги намного полезнее нескольких лет фронтенда, ну только если ты на фронтенде не собираешься сидеть всю жизнь.
Если ты уже более-менее понимающий программист, то тебе это нахуй не упало, ну разве что немного алгоритмы подкачать, но как начало самое то для некоторых.
+++++
Вот проблема только лежит в переходе между началом и дальнейшими действиями.
Вопрос ко всем тут: я сейчас заканчиваю десятый класс, балуюсь олимпиадками на среднем уровне, во всех рейтингах-таблицах уровня выше районного стабильно в серединке. Но я отдаю себе отчет в том, что мои некоторые скиллы в спортивом программировании нахуй не сдались в том, что называют промышленным программированием. И для меня сейчас остро стоит вопрос о переходе к такому виду работы. И если с олимпиадками все просто - задач пруд-пруди, то на чем мне практиковаться на начальном уровне в обычном программировании я ума не приложу. Наверное, я безыдейное говно. Вот как олимпиадники вообще существуют в ит-структуре?
Отлично существуют, промышленное программирование это надо прочитать пару кодстайлов и книгу банды четырёх, всё.
Допустим я познакомился с крестами только для олимпиад. Я знаю синтаксис, знаю стл. ООП мне нахуй не нужен был до этого. Теперь я хочу познать ооп, прочитал я пару глав книжки. Что-то понял. Но как мне это закрепить на практике? Один раз писал условный класс time, но это же, писец, скучно. Ничего интереснее не найти?
Что там в ООП учить-то. Если очень хочешь, то придумай себе проект какой-нибудь, например, обработка русского текста.
Я на ООП никогда внимание не обращал, интересовался новыми фичами, а теперь мои кресты никому и не нужны, на работе почти всегда на питоне пишу, иногда шарп ещё.
А скиллы для собеседования где взял. Писал проект какой-нибудь, например, обработку русского текста?
Нет, только олимпиадная прога, просто я сейчас в безопасности работаю.
Всерос 2013.
>Что почитать?
И что, обязательно читать теорию от корки до корки, прежде чем лезть в программирование?
Нет, но вероятнее всего, что ты однажды напорешься на то, что твоих мозгов не хватит, чтобы придумать какую-то структура данных или алгоритм, но которые уже описаны умными людьми. Это полезно
Все не нужно, в олимпиадках используется подмножество алгоритмов, то что легко и быстро написать. Но что-то нужно посмотреть обязательно, ты не можешь в одиночку придумать все что придумало человечество за 60+ лет, кем бы ты там небыл.
Тимус стоит прорешивать однозначно. Думаю, сотка задач позволит претендовать на эксперта
На всеросе не сильно соснёшь. А вот кодефорсес пока отложи.
>Тимус стоит прорешивать однозначно
Спасибо, значит, буду прорешивать.
>>726317
>Я прорешал сотку снизу по сложности
Давно тренируешься?
>Давно тренируешься?
Ну сотку это я переборщил. Где-то 60.
Перед вузом пару месяцев поигрался. На самом деле, на этом уровне почти нет серьезных алгоритмов. В основном матеша и смекалка. Когда встретился с победителями/призерами всероса, потерял мотивацию продолжать.
Недосягаемый уровень. У людей 5 лет форы во всяких СУНЦах и физмат-лицеях против моей гуманитарной гимназии.
А как же Ренат Муллаханов, вечная ему память, из обычной школы, на 1 курсе засел за тренировки, на 3 курсе взял золото финала ЧМ.
Талант, имхо
> В основном матеша и смекалка. Когда встретился с победителями/призерами всероса, потерял мотивацию продолжать.
на всеросе можно взять диплом, не написав алгоритма сложнее бинпоиска, атвичяю. одноклассник так и сделал
ваще нет.
Ебать охуенный чувак был. Просто взял и опустил в парашу мамкиных корзиноидов, которых дрочили со школьного возраста.
До сих пор бомблю со всяких "одаренных детей", у которых на проверке оказывается мамка/папка либо сорт оф ученые/преподы, либо бохатые и наняли корзине репетиторов.
В то время как плебс продолжает в неведеньи кушать убогую школьную программу.
> а проверке оказывается мамка/папка либо сорт оф ученые/преподы, либо бохатые и наняли корзине репетиторов.
такие одаренности далеко всё равно не идут. а если идут, то шли бы и без мамок-папок-репетиторов
>такие одаренности далеко всё равно не идут
Верно.
>а если идут, то шли бы и без мамок-папок-репетиторов
Неверно.
>такие одаренности далеко всё равно не идут
На чугунной жопе как раз и идут. Думаешь, все спортивные программисты гении что ли? В основном они стали такими благодаря долгой задрочке, и под присмотром наставников.
>то шли бы и без мамок-папок-репетиторов
Увы, но такое бывает редко. "Маменькиных сынков" больше на порядок. Каким бы ты не был талантом, но без ресурсов и вовремя преподнесённых знаний ты пролетаешь.
> без ресурсов
"ресурсы" и "мамка/папка либо сорт оф ученые/преподы, либо бохатые и наняли корзине репетиторов" -- разные вещи. некоторым хватает просто некоторой поддержки, а не последнего
> Думаешь, все спортивные программисты гении что ли?
топовые -- да. а нетоповые на то и нетоповые, сколько бы их мамки и преподы ни надрачивали, они не оч много могут
>>726730
> неверно
имелось в виду "без таких мамок, о которых говорил ты", см. выше
Ну всё, ты прав, ты прав, осади уже.
>сколько бы их мамки и преподы ни надрачивали, они не оч много могут
Впрочем, надо ли? Поиграться для души/мозгов и задрачивать до посинения ради прокачки ЧСВ или пристройки своей жопы в говновуз - немного разные вещи.
Что-то с давлением было.
> надо ли
увы, в этом случае решают мамки.
> задрачивать до посинения ради
ради влажных фантазий мамки обычно. по крайней мере, не конченый человек, которому не очень импонирует спортивное программирование(да что угодно подобное) не будет им заниматься сам даже ради каких-то своих целей
Рак жопы.
Меня вот моя мамка-швея заставляла только ходить в церковь. И гулять в день как минимум 2 часа. Приходилось тупо стоять у подъезда, чтобы потом посидеть за компом, а то шнур забирала. А когда она уебывала на работу, со мной оставалась бабка, которая бухала до состояния говнины и валялась обоссанной в туалете.
А теперь сравни с родителями Короткевича, программистами, которые обучали его с самого детства.
>гулять в день как минимум 2 часа. Приходилось тупо стоять у подъезда
Ну да, мамка виновата в том, что ты ебанат, не умеющий жить.
Увы, но в школьном возрасте подрастающий член общества просто не знает ещё, как жить, и как можно жить иначе. У него тупо нет опыта, знаний, кругозора. Всё зависит от окружения.
Так что возвращайся в /b/, школьник.
верно говоришь
Я примерно так в 13 призёром стал, правда, вместо алгоритмов пришлось из сообразительности все соки выжимать.
так я и говорил, что алгоритмов чувак не очень писал
> Приходилось тупо стоять у подъезда
ты идиот чтоле? по крайней мере гулять много интереснее, чем стоять у подъезда.
результат сравнения очевиден, но давайте сравним просто семью, в которой ребёнку хотя бы не мешают. тогда вероятность получить не корзинку с испорченной психикой и мировоззрением сильно меньше, соответственно действительно одарённый ребёнок в таком случае будет явно более успешен
Обойти, конечно, рекурсивным дфсом
Понимаю, что поздно, только щас заметил тред.
Задача дико тупая, не слушай тех, кто сыпет какими-то заумными словами.
У тебя есть граф, вершины это команды, ребро есть если был матч. У тебя у каждой вершины степень ровно 2 по условию. Тогда граф разбивается на циклы (это вроде не очень сложное утверждение например, можно просто начать идти от какой-то вершины по ребрам, по одному ребру пришел, по другому вышел, так как вершин N, рано или поздно ты попадешь в какую-то вершину, где ты уже был. Это может быть только первая вершина с которой ты начал, иначе ты получил вершину степени 3 - ты в нее вошел, вышел, а сейчас еще раз пришел)
Очевидно, что из каждого цикла длины k можно взять не более k / 2 команд. При этом, k / 2 можно взять - просто берешь через одну.
А циклы это компоненты связности. Разбиваешь dfs-ом граф на компоненты связности, считаешь сумму (размер очередной компоненты / 2), если она хотя бы К - то все заебись
Да, деление везде целочисленное.
Алсо, двукратный призер всероса ИТТ, сейчас занимаюсь АСМ-ом в вузике хоть и не столь активно дрочу, как некоторые, задавайте свои ответы
Берешь, читаешь какую-нибудь книжку/курсы (проси совета в соответствующем треде), параллельно решай задачи из первого блока отсюда, чтобы освоить основы http://informatics.mccme.ru/
Далеко копать в язык не надо (в смысле про всякие слова уровня ООП и прочее), если надо чисто для олимпиадок
На тимусе можешь еще порешать тупенькие задачки.
Такой сильной антирекламы я давненько не видел. Если бы не возможность удаленки и миграцию, я бы давно уже дропнул эту хуйню нахуй, но я слишком тупой для сложных вещей и не умею наебывать на даллары.
Там ещё и жиды сплошные
нормально защитились от тянок, сразу видно людей которые берегут свой пестик для единственной, моё увожение
Это ж тупые жиды, они сами не кодють. Вот у них в подвале сидит Ванька-программист который ебашит все проекты в одно рыло по 12 часов в день без выходных за два доширака и упивается своей элитарностью и знанием алгоритмов.
Вообще-то Денис очень талантливый, и многие задачки, где куча текста в виде сказки или фэнтези придумал именно он. Бронзовая медаль на ЧМ асм айсиписи
Да я то без претензий к ним, кроме разве что к художественной ценности их рекламы. Просто не мог пройти мимо и не подметить некоего сходства.
Второй раунд коде джема уже через 17 минут.
Это пока. Кто знает, что будет дальше.
Дебил ёбаный.
Ну, ИДЕ это громкое слово в данном случае. Я пишу прямо в Groovy console. Её легко повесить.
хехе, творение знакомых засветилось
Я болею за команду Ural FU : UF larU, но они не пробьются. Думаю, что на первое место выйдут Ural FU: Dandelion (Меркурьев, Сивухин, Данилюк).
Он из моего города, потому и болею за них.
не фартануло, но все равно крутые
А ты возьми и почитай
Тут ещё и язык нужен?? О_о
>Решишь 500 задач на тимусе - будешь гарантированно красным на кфе
Откуда такая инфа пошла?
По книге Стенли Б. Липпмана, Жози Лажойе, Барбары Э. Му "Язык программирования C++. Базовый курс". До этого опытов с программированием почти не имел
первокурсник
>> Для проведения эксперимента надо выбрать из N имеющихся приборов только три. Для этого выполняют следующую операцию - если в группе приборов больше трех, то их нумеруют и выбирают одну из групп: с четными или нечетными номерами. Операцию повторяют до тех пор, пока в группе не останется три или менее приборов. Если их остается ровно три, то они и берутся для эксперимента.Требуется написать программу, которая подсчитает количество способов такого выбора приборов.Как сделать это за 1 секунду при 1 <= N <= 2147483647. Не могу уложиться в эти условия.
^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
Спасибо, но мы на курсе не дошли до такого, надо как то через циклы if for while getline и функцию stoi
Буду благодарен если напишешь примерно, что у тебя в коде написано, чтобы я погуглил
Да потому что эта задачка вполне подходит, я на тимусе решал, там есть похожие по сути.
Густокашин сам крутой олимпиадник, вот и курсе своем дает задачки такие
https://meduza.io/feature/2016/05/03/my-nachinaem-nashe-mochilovo
А как в это дело вкатиться? Обязательно иметь ученую степень в иб? Вот как катываться в олимпиадки без сторонней помощи хотя бы понятно, а тут какая-то закрытая система
Ты дебил блять какие студенты, месяц назад начал проходить курс, до этого о проге не слышал даже
Блджад, enter случайно отправил.
Короче, по моему скромному мнению, даже школьные олимпиадки это отчасти закрытая система. Потому что у ололомпиадников есть свои "клубы", есть тренера, короче мафия задротов, и типа всеобщая олимпиада сводится к эстафете "между своими".
Бомбит например с того факта, что в обоссаном ацм победителем уже хуй сколько раз был летмо, хотя по мне говношарага говношарагой. Подебителей надрачивают тренерки, причем только из числа отборных задротов, а все остальные желающие сосут хуй.
В итмо на тренировки могут приходить все желающие, всему научат. Я сам, как школьник, тренируюсь у Маврина, просто в начале учебного года кинул анкетку и все
Да
Да много годных универов, ИТМО вывозит еще за счет того, что туда больше всего задротов олимпиадников съзжается, причем не только из Рашки. Самарский вуз сильный, УрФУ тоже, ПермГУ тоже золото брали
Ну да, только в тот же СПбАУ перевелся на первый курс со второго ИТМОшник, а еще перешел (в прошлом году) вот как раз победитель межнара из СПбГУ.
Так что, возможно, это не надолго, хех
Лол, в ау вообще не особо приветствуют занятия асмом, потому что отнимает много времени и сил, а программа там и без того сильная.
Мимо имею друзей и на кт, и в ау, и в спбгу, и в урфу и в пермгу
Еще не начинал
Ну да, но на финал команды вот проходят, пусть и выступают не очень. Да и на всякие сборы ездят себе спокойно, например
Гхм... нет. Вы извините, но, может быть, я номером ошибся? Это точно тред специальных олимпиад, а не клуб гей-знакомств?
Впервые услышал про него. Попробую, наверное.
А чем ты на работе занимаешься?
а чем они там сложные?
Он из ЛНУ, чувак в олимпиадках с восьмого класса (сейчас он на шестом курсе). Потом в ЛНУ учился, тренер - Василь Білецький, он тоже брал золото ACM в 2008 году.
Так что там не интернетом, а благодаря хорошей тусовке в том числе. Хотя решал он дофига, спорить не буду
Ну вот шашматы, например. Там целую игру надо закодить с перебором вариантов. На все это дается 1:40 времени. Может, конечно, вы тут все чемпионы по скоростному набору кода, но мне нужно полдня чтобы такое закодить и отладить. Ты пробовал эту задачу делать? Сколько времени потратил?
Что там было? Сейчас только какую-то хуйню "A+B" выводит, не вижу нигде шашмат.
https://contest.yandex.ru/algorithm2016/contest/2497/problems/C/
Поиск Яндекса отлично работает с блогами, так что во время поиска и последующего чтения блогов может найтись много экзотической информации. Например, описание игры шашматы.
Игра шашматы происходит на стандартной доске 8 × 8: вертикали пронумерованы буквами от a до h, горизонтали — числами от 1 до 8, поле a1 — чёрное, каждое чёрное поле может граничить по стороне только с белыми, и наоборот.
Игроки ходят по очереди. У белых одна фигура — шахматный конь, у чёрных — обычная шашка. Фигуры делают ходы в соответствии с правилами своих игр. А именно, шашка изначально располагается на чёрном поле и может передвигаться только по чёрным полям, уменьшая номер горизонтали на 1, номер же вертикали может как увеличиться на 1, так и уменьшиться; разумеется, выход за края доски запрещён. Конь ходит на одну клетку в некотором выбранном направлении (горизонтальном или вертикальном) и на две в перпендикулярном ему; при этом начальная и конечная клетки хода должны находиться на доске.
Правила, по которым определяется победитель, таковы:
Если на ходу белых конь может пойти на поле, занятое шашкой, конь берёт шашку, и белые выигрывают.
Если на ходу чёрных шашка может пойти на поле, занятое конём, при этом следующее в том же диагональном направлении поле существует (то есть конь стоит не на краю доски), шашка берёт коня, и чёрные выигрывают.
Если на ходу чёрных шашка может пойти на поле, занятое конём, но при этом конь стоит на краю доски, шашка не может сделать соответствующего хода. Если это был единственный возможный ход шашки, белые выигрывают.
Если чёрные своим ходом приводят шашку на первую горизонталь, чёрные выигрывают.
По заданной начальной позиции и цвету игрока, делающего ход первым, выясните, кто выиграет при правильной игре.
>Так что там не интернетом, а благодаря хорошей тусовке в том числе
Двачую. Если не связи со всякими ололо-тренерами и прочей петушнёй, то хотя бы иметь товарища, который подскажет, что и как учить, какую литературу читать. Я в 8 классе в одиночку пытался решать задачи и обломался на них по полной, без соответствующих знаний было СЛОЖНА и страшно.
Я сделал первые две за 8 минут, и лёг спать, так как там только одну достаточно, чтобы пройти.
для тренировок есть кодфорсес.
Шашматы -- просто написать перебор. Не так долго и писать, ведь всего две фигуры. Наложить ограничения. Делать проверку на победу. запихать это всё в рекурсию. Посмотреть на дерево. Вывести ответ.
А что там такого-то?
http://codeforces.com/blog/entry/7162
Чувак не знает про передачу параметров по ссылке.
http://codeforces.com/blog/entry/13207
Чувак не знает про ненормализованные даблы и не в состоянии нагуглить.
Остальное - приглашения на какие-то конкурсы.
26-3
Это CLRS.
Скиньте пожалуйста пример решения этой или концептуально похожей задачи. Ну или на пальцах поясните, я обучаемый.
Ну вот что получилось. Прогнать тесты не могу потому что не зареган. На это ушло около 45 минут.
https://ideone.com/Sra0zX
Это не то, что тебе нужно. Я тебе уже в ньюфаг треде намекал, что тебе надо собрать ранец
https://ru.wikipedia.org/wiki/Задача_о_ранце
>А что там такого-то?
Ну он же пишет, что не было команды, что в одиночку превозмогал, а теперь он охуенно-красный.
https://ideone.com/3P69JN
e4 e3 white -> white wins
неправильно, должно быть блэк
Собственно, о чем я и говорил. 45 минут ушло на написание этого, потом еще час на отладку, вот и закончилось время. А это только третья задача.
Написал и всё, проверил что запускается. Не имею возможности потестить.
Ну вообще у меня на диске пылится готовое решение для https://www.e-olymp.com/ru/problems/32
Так что в контесте я бы взял его за основу и поменял только минимум - разницу между пешкой и шашкой. Получилось бы быстрее.
И насчёт часа на отладку ты загнул. Так редко бывает с олимпиадными задачками при грамотном подходе к дебагу.
Во-первых, перестань меня преследовать.
Во-вторых, Кормен лучше знает что нужно, а что ненужно
В-третьих, ты нихера не условия задачи.
Собственно, с третьего пункта мне нужно было и начинать.
Ну давай, расскажи мне как в твоей жизни встала задача поиска максимального паросочетания в двудольном графе.
Приходит такой прафесар и говорит, кароч)) вот вам задача, кто не решит - тому пизда.
Альзо, если двудольный граф это bipartite graph, то ты опять пальцев в жопу.
При всем уважении, не мучай себя.
Не удивлюсь, что Бардашевич двачует. Правда, явно не тут. Ближе к желтым колобкам
Лол, а что так?
Сначала на листочек выписывается строка. Игроки ходят по очереди и на каждом ходе можно стереть один символ из начала или конца строки. Побеждает игрок, перед ходом которого строка была палиндромом. Палиндромом называется строка, которая читается одинаково слева направо и справа налево.
Определите, какой игрок победит при оптимальной стратегии обоих игроков.
Что за сложный мемес?
Так это тренер.
> соревновательной
чуваки с codeforces или topcoder очень хотят. если дрочишь на рейтинг, то добро пожаловать туда. мне более-менее помогало(это единственное место кроме олимпиадок, где я решал задачи). правда призером всероса так и не стал
у меня 25 задач на тимусе и я вообще не шарю, держи гайд от великого мастера
>правда призером всероса так и не стал
Чем сейчас занимаешься? Куда поступил/будешь поступать?
> Чем сейчас занимаешься?
страдаю хуйнёй, cf пишу, ну и соревнования типа codejam, rcc
> Куда поступил/будешь поступать?
видимо, в итмо(олимпиадки 1 уровня есть). хотелось бы в мгу ибо корочка пижже, но егэ сдать хорошо если на подтвержение в итмо смогу
Самый жесткий буст получил в школе. Нам преподавала сестра одного из чемпионов ACM в прошлом, менее успешная. Это было в 8 классе. Потом на кружке при ИТМО пересел на кресты, с тех пор только стал более уверенным
М-м-максимум уныло. И слишком велик соблазн подсмотреть тесты, почитать разбор или чужое решение.
не было такого. ваще есть 3 случая:
1) эта фигня для самолюбования а ты показываешь что ты слабый -> провал
2) эта фигня просто чтобы порешать интересные таски -> нафиг читерить если цель -- решить?
3) остальное -> нафиг ваще решать?
ок, тогда как может возникнуть желание считерить? в любом случае оно нерационально
Наверное, акцептед доставляет больше чем весь процесс. Или это временное, или мне не место в олимпиадном движении
т.е. для тебя AC полученный путем прочтения чужого решения -- заебись? если так, то, видимо, не место. едиственная ситуация, когда это нормально -- это если ты хочешь научиться хорошо реализовывать(тогда разбор надо читать без деталей, естесна)
Есть массив уникальных дат месяца, отсортированный по возрастанию, на которые вам требуется купить билет t[0..30], где t = [1..30]. И есть следующие типы билетов:
1) Билет на 1 день за 2 рубля;
2) Билет на 7 дней за 7 рублей;
3) Билет на 30 дней за 25 рублёй.
Напишите программу, которая поможет пидорахе сэкономить на проезд в текущем стабильном положении в стране.
Программа должна возвращать минимальную сумму в рублях, которая покрывает все поездки.
Пример [1, 2, 4, 5, 7, 29, 30] = 11.
Очевидная динамика очевидна.
последовательность дней из:
23~30 = 25 рублей
22 = 23 рубля
18~21 = 21 рубль
15~17 = 14+(2,4,6) рублей
11~14 = 14 рублей
8~10 = 7+(2,4,6) рублей
4~7 = 7 рублей
1~3 = (2,4,6) рубля(-ей)
Осталось выделить последовательности
Дэбил, зачем пытаешься жадник придумать. Много таких по весне оттаяло, в этой задаче думать вообще не надо, пишешь динамику и всё. Уметь отличать задачи на жадник от задач на динамику – крайне важный скилл.
Мсье, а как вы определили, что тут лучше динамическим программированием решить?
Определил из того, что задача стандартная и обычной линейной динамикой решается в два счёта.
>Уметь отличать задачи на жадник от задач на динамику – крайне важный скилл.
Подкинь чтива на этот счёт.
Нет никакого чтива, по крайней мере, я так и не нашёл. В Кормене есть про динамику, сам пытался в своё время понять по нему, но не вышло. Есть только стандартный принцип: если тебе кажется, что задача на жадник, но что-то не выходит, или слишком тяжело, то попробуй динамику. В случае этой задачи вообще беспроигрышный вариант, что жадник что динамика одну сложность имеют.
Нечего показывать, мне решение и так очевидно.
Могу на пальцах: мы по каждому дню от него вперёд проставляем оптимальные варианты. Пусть сегодня 0 день, тогда мы смотрим, есть ли поездки в день 1. Если есть, то ставим на 1 день 2 рубля, иначе 0. Смотрим на поездки с 1 по 7, если есть, то ставим в 7 7 рублей, иначе 0. Дальше принцип понятен, думаю, когда я говорю "ставим", то имею в виду взятие минимума из нашего промежуточного варианта и того, который уже для этого дня есть. Изначально 0 дню ставим 0, остальным INF.
По тесту из условия, на 0 дне в 7 ячейку проставится 7, дальше эта семёрка будет ползти до 28 дня, откуда два раза прибавится 2.
Чтобы решение было за линию, наличие поездок на промежутке проверяется с помощью префиксных сумм.
Что-то как-то сложны ты на 2-х пальцах объясняешься.
Вот что у меня вышло:
https://github.com/arbitrary-dev/problem/blob/master/ticket/src/main/java/com/problem/ticket/Ticket.java
Успокойся, сопи в две дырки ровно
Ок, просто мне больше нравится решать задачи более общими методами. Вот тут ты напрямую пользуешься тем, что один из билетов всего на 1 день, а другой сразу на 30, то есть на весь промежуток. Давай тогда дадим тебе промежуток в 100000 дней и 10 каких-нибудь случайных чисел как длительности билетов. Тогда ты придёшь ровно к тому же, что я и написал, иначе пальцы отвалятся случаи разбирать.
http://paste.ofcode.org/8ErWwmMWpEa9JJksEAbhHp вот, в общем, короткое и более мощное решение.
Секунду, так писать на 1С?
после 6 класса
Просто.
Найди первый элемент в отсортированном массиве, он на позиции k (нумерация с 0). Разберём два случая:
1. k%2 == 0 -> проводим операцию на подотрезке от 1 до k -> k элемент стал k-1.
2. k%2 == 1 -> проводим операцию на подотрезке от 0 до k -> k элемент стал k-1.
Таким образом доводим первый элемент на его место (нулевое), дальше точно таким же образом обрабатываем суффиксы массива длиной n-1, n-2, ... , 2. Так как элементов всего 100, то задача решается втупую за куб.
Если ограничения были бы чуть побольше, то элементы попарно в массиве можно свапать за логарифм двумя неявными декартовыми деревьями, с ними получится решение за N^2 * logN.
Пиздец перемудрил, это же тупо на сортировку пузырьком, типа такой хитровыебанной операцией просто завуалировали, что ты можешь свапать два соседних элемента. Пишешь обычный пузырёк, хотя за квадрат, хоть за куб, и всё.
Ты хоть раз пузырёк писал?
В общем, вот тебе википедос https://ru.wikipedia.org/wiki/Сортировка_пузырьком#.D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.80_.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D1.8B_.D0.B0.D0.BB.D0.B3.D0.BE.D1.80.D0.B8.D1.82.D0.BC.D0.B0
Знаю девочку, которая знает Гену лично. Замеряли они это дело как-то. Там было что-то чуть больше двух минут, если мне память не изменяет
Зря ему про плюсы рассказали, мог бы в книгу рекордов Гинесса попасть.
На работе заставили выучить. Там был джава проект, но нужно было и скрипты писать. Нравится что есть опциональная типизация.
0
мне на пересдачу дают одну из них я сижу туплю.
вру одна решена Козла пустили в Огород
так же есть пак решении на эти задачи?
это блять что такое?
Как это, обычно как раз наоборот, в задачке абсолютно чётко сказано, что от тебя хотят, с ограничениями и примерами. А вот что бывает в типичных ТЗ...
Нуу, нет, но большой рейтинг на кодфорсах или топкодере это плюс на собеседовании во всякие яндексы.
>>779646
Вот вакансия, где пишут про олимпиадки, например http://www.aimtech.com/vacancies/C++ Developer/
Мне бы хоть три штуки из предыдущих google code jam решить, дак я и одну задачку не потяну.
https://code.google.com/codejam/contest/32004/dashboard
Её за два часа решают, я за два часа даже не разберусь что нужно от меня.
Фигасе из Россси только 255 человек в гугл код джам участвовали. Вообще программистов нету.
Мне любая работа программистом пойдет. Лишь бы задачи поставленные решать, в топ 500 мне хоть тресни не войти.
Как посчитал? Если учесть, что на квалах в этом году было больше 27 тысяч человек, то 255 как-то мало звучит.
https://www.go-hero.net/jam/16/languages/Python#problems
254 contestants может я конечно что то не правильно понимаю
Просто если бы участвовал на 1 человек больше, то было бы переполнение и счёт пошёл бы снова с нуля.
считываешь все запросы сначала, а потом одним проходиком отвечаешь на все
решай задачи прошлых контестов на кф. Там и разборы есть
Копелиович. У Рубинчика одноклассник асmщик учился с Копелиовичем, потом его вроде отчислили.
Но это даже не близко к половине
Есть очень мало контестов, типа Distributed Google Code Jam, где он может пригодиться. В остальных случаях процессорное время считается, очевидно, как сумма всех тредов, так что оверхед на управление тредами только навредит.
Вот есть следующая задача.
Дана плоскость, есть несколько точек на ней (до 500), с не очень большими координатами (от 0 до 50, вещественные). Надо найти для каждой пары точек кратчайший путь между ними.
Плоскость (можно рассматривать только квадрат 50х50) поделена на единичные квадраты, каждому квадрату сопоставлен какой-то вес. Соответственно, длины всех отрезков внутри квадрата домножаются на его вес.
Не обязательно точное решение (я не уверен, что оно есть), но очень хорошее приближение желательно, да и чтобы работало быстро.
Я пробовал сделать следующее: покрыть большой квадрат сеткой, построить граф на этом, соединить исходные точки с ближайшими вершинами сетки и запустить 500 раз (количество точек) Дейкстру (которая с кучей)
Но это работает медленно при сколько-нибудь большом размере сетки, да и хочется таки сделать более хорошее приближение. Всякие A-star для увеличения скорости тут разумеется не подходят - мне надо от точки искать расстояние до всех, а не до одной, то есть все равно почти весь граф придется обойти
Какой ты ещё граф делал? Судя по твоему условию, тут всё намного хитрее. То есть минимальное расстояние не факт, что прямая, так как разные веса у секторов. Я всё правильно понял? Тогда физическая аналогия -- свет в материале с разной проницаемостью. То есть минимальное расстояние до заданной точки выражается через тригонометрию. И перебором по всем точкам O(n^2). Можно ли быстрее? Надо думать. Ещё такой вопрос -- какой вес на грани квадрата? То есть из одного сектора перпендикулярно дохожу до другого, а дальше двигаюсь вдоль грани: какой в итоге вес?
Да, конечно не прямая, иначе в чем задача, лол. Но, тем не менее, это какая-то ломаная с не очень большим числом отрезков
Считаем, что по грани совсем вдоль нельзя идти - либо ты с одной стороны (на eps), либо с другой.
А как выражается через тригонометрию, я не понимаю вот чего-то. Ну то есть явное аналитическое уравнение у меня не получилось написать. Для случая если надо перебраться в какую-то точку в соседнем квадрате понятно как считать еще (да и то, если оптимальныей путь не идет как-то в обход), а в общем случае хуй поймет.
>>786257
>какой граф
Эм, ну в смысле? Я ж сказал: покрываю все мелкой сеткой с небольшим шагом (например, 1/3, если меньше, то дольше работает), вершины - узлы сетки и исходные точки, ребра - отрезки между соседними точками сетки (по всем 8 направлениям), веса считаются легко
Ну так да, я и говорю, что хочется как-то оптимальнее. А не очень понятно как, не увеличивая плотность сетки
Расскажи подробнее про требуемую точность и производительность.
Сколько есть времени на анализ плоскости, и сколько раз после этого надо определять расстояния между точками на ней?
Я бы увеличил количество точек, но оставил только точки в фиксированных позициях на границах квадратов.
Предрассчитываем таблицу расстояний между точками с фиксированными позициями на сторонах квадрата, чтобы потом забыть про тригонометрию. Цена ребра равна соотв. расстоянию на коэффициент квадрата.
Дальше группируешь квадраты в блоки 4x4, строишь для каждого блока матрицу расстояний между всеми его внешними точками (можешь начать с расстояний между внутренними точками квадратов 2x2, потом между их внешними точками, а потом объединить четыре 2x2 в один 4x4 и повторить процесс). Можно придумать оптимизации исходя из геометрического смысла. Например путь из (0.1, 0.1) в (2.1, 0.1) точно не проходит через (1.1, 0.9).
Как пользоваться этим я думаю понятно. Но не забывай, что кратчайший путь между точками внутри блока может выходить за пределы блока.
Есть 1 взвешенный, неориентированный граф. Он разделён на 2 подграфа так что все его вершины входят в один из двух подграфов. При этом оба эти подграфа состоят только из одной компоненты связанности. У этого графа веса имеют не вершины, а рёбра. Ценой графа называется сумма весов всех ребер которые соединяют 2 подграфа. Разрешается переносить любую вершину подграфа в другой подграф кроме некоторых закреплёных. Закреплёные вершины всегда соединенны рёбами только с вершинами своего подграфа и названы заранее. Задача минимизировать цену графа так чтобы количество вершин принадлежащих каждому подграфу осталось неизменным и подграфы остались состоять из одной компоненты связанности.
Ограничения на размер графа?
Вот это воды налил, вместо того чтобы просто описать ограничения на минимальный разрез.
По теме, решения с ходу не знаю, есть подозрение, что за полином не решается, ну или очень трудно. В любом случае, глянь в сторону как раз минимального разреза.
Не у тебя у одного такое подозрение возникло. Сходу даже не решается частный случай невзвешенного графа например
Щас подумал про закреплёные вершины. Они не нужны исли в клнце просто одну проверкц добавить. Может так задача проще станет? Почитал про разрез. Мне его минимального веса надо и размеры подграфов не должны поменяться. Тогда нужно найти минимальный разрез такой алгоритм ведь есть? пока он не будет делить граф правильно искать следующий за ним по размеру разрез. Такое возможно?
Но если знать, например, что вершин не больше сотни, или что максимальная степень графа невысокая, или что он разреженный, или что он планарный, или что требуется приближённое решение, то можно подумать об оптимизациях.
Есть ли у задачи физический смысл, типа раскидывания компонентов по сторонам платы, или серверов по датацентрам?
>что вершин не больше сотни
2к максимум. У каждой вершины от 2 до 6 рёбер.
>требуется приближённое решение
Ну в крайнем случае можно и приближённое. Или сделать вес всех рёбер 1.
>Есть ли у задачи физический смысл
Его в некоторых случаях нужно будет в игре применять. Один из них минимизация длины линии фронта или раздел границы после войны. Какой алгоритм там теперь я не знаю, но он либо оставляет какие-то полуострова врезающееся в чужую территорию там где были прорывы, либо анклавы там где были котлы.
смотрите с какой скоростью пацан решал задачки, причем сложные
Хм, это контест с Петрозаводских сборов. Либо он в числе его авторов, либо он был участником на сборах, а потом досдал задачи, в чем проблема?
Дуги и вершины нарисованы в фиксированных позициях на плоскости, и должны остаться на тех же местах после проведения разреза? Если да, то это важное ограничение.
Оптимальным разбиением пикрелейтеда может быть {A, B, C} и {D, E}, но ты не сможешь провести так границу не пересекая лишних дуг.
Лол, как ты до такого варианта вообще дошёл? У нас тут на граф задача, а не на геометрию.
Твоя геометрия решается за что-то около (V^2)*E то есть не больше чем V^4 в общем случае тупым перебором с сортировкой по полярному углу.
>>791373
Да, если это игра, то звучит разумно. Просто надо уточнять такие детали, на плоскости задача, можно сказать, давно известна и решается просто. В общем случае это объект научного исследования.
алсо, запилил перекат >>792098 (OP)
Вы видите копию треда, сохраненную 25 июля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.