- Видео 42
- Просмотров 149 713
Wilcodit
Россия
Добавлен 14 июл 2022
Мы будем кодить
Задачи С Отборочного Этапа ИТМО (разбор)
Разбираем задачи с первого отборочного этапа олимпиады ИТМО за 24-25 год
Телега - t.me/wilcodit_school
00:00 - Введение
00:27 - Задача 1
05:23 - Задача 2
14:02 - Задача 3
15:43 - Задача 4
21:49 - Задача 5
30:36 - Задача 6
34:44 - Задача 7
38:30 - Задача 8
42:51 - Задача 9
48:35 - Задача 10
51:42 - Итог
Телега - t.me/wilcodit_school
00:00 - Введение
00:27 - Задача 1
05:23 - Задача 2
14:02 - Задача 3
15:43 - Задача 4
21:49 - Задача 5
30:36 - Задача 6
34:44 - Задача 7
38:30 - Задача 8
42:51 - Задача 9
48:35 - Задача 10
51:42 - Итог
Просмотров: 133
Видео
Как Работает Алгоритм Дейкстры [Spanning Tree]
Просмотров 21 тыс.4 месяца назад
Алгоритм Дейкстры позволяет нам найти кратчайший путь между двумя вершинами графа. Здесь мы исследуем интуицию алгоритма - какую информацию нам нужно отслеживать, в каком порядке нам нужно исследовать вершины и каковы ограничения алгоритма. tg: t.me/wilcodit_school Перевод видео с канала Spanning Tree Ссылка на видео: ruclips.net/video/EFg3u_E6eHU/видео.html Канал автора: @SpanningTree
Как Работает O-большое. Оценка Сложности Алгоритма
Просмотров 3977 месяцев назад
В этом видео ты узнаешь, как оценить асимптотическую сложность алгоритма по времени и по памяти, как работает О-большее и как всё это применять на практике. Телеграм - t.me/wilcodit_school 00:00 Введение 00:30 Сравнение двух алгоритмов 01:17 Первая идея 04:01 Асимптотика 05:23 Правильно оценивания асимптотики 10:42 Примеры асимптотик 13:53 Применение в олимпиадном программировании 15:32 Оценка ...
Ты Пишешь Бинарный Поиск НЕПРАВИЛЬНО
Просмотров 7348 месяцев назад
В этом видео ты узнаешь как правильно писать бинарный поиск, как выбирать границы для бинпоиска, и как выглядит бинпоиск по ответу. Телеграм - t.me/wilcodit_school 00:00 - Введение 00:25 - Инвариант 03:24 - Код 05:17 - Примеры 08:30 - БинПоиск по ответу
Ответ славянскому языку В††, ЯЩЕРЫ - СИЛА!
Просмотров 3 тыс.Год назад
Ответ славянскому языку В††, ЯЩЕРЫ - СИЛА!
Задачи с отбора на стажировку в Яндекс (разбор контеста)
Просмотров 5 тыс.Год назад
Задачи с отбора на стажировку в Яндекс (разбор контеста)
Задачи с отбора на стажировку в Tinkoff (разбор контеста)
Просмотров 16 тыс.Год назад
Задачи с отбора на стажировку в Tinkoff (разбор контеста)
Можно ли всегда выигрывать в Тетрис? [Spanning Tree]
Просмотров 8 тыс.Год назад
Можно ли всегда выигрывать в Тетрис? [Spanning Tree]
ГАЙД по Олимпиадному Программированию: Где и Как Изучать?
Просмотров 55 тыс.Год назад
ГАЙД по Олимпиадному Программированию: Где и Как Изучать?
Игра За 48 Часов! Опыт участия в GameJam
Просмотров 6132 года назад
Игра За 48 Часов! Опыт участия в GameJam
Разбор 27 Задания С Реального ЕГЭ по Информатике 2022
Просмотров 1,2 тыс.2 года назад
Разбор 27 Задания С Реального ЕГЭ по Информатике 2022
Я сделал двумерный цикл, первый узнает 1ю квартиру на этаже, второй просто сохраняет 3 в ряд. Что думаете? const haus_high = [3, 5, 6]; // Этажи в домах const raum_count = 3; // Количество квартир на этаже const v = 2; // Интересующий этаж function getMax(hauseID) { return haus_high[hauseID] * raum_count; // максимум квартир } function getRaum(stoss) { return (raum_count * stoss) - raum_count; // первая квартира на этаже } function calc() { let prev_max = 1; // Квартиры начинаются с 1 const raums = []; // Квариты на этаже for(let i=0; i<haus_high.length; i++) { let raum = prev_max + getRaum(v); prev_max += getMax(i); // Добавляем смещение до последней квартиры в доме if(haus_high[i] < v) continue; for(let raum_id=raum; raum_id < raum + 3; raum_id++) { raums.push(raum_id); } } return raums; } console.log(calc())
Код можно в консоле браузера проверить, это Java Script.
Норм с графеном заморочился!))
12 баллов за этот этап в 11 норм?
Да, проходной 10 баллов был год назад, если хорошо второй отбор напишешь - можно считать гарантированный проход
Телеграм - t.me/wilcodit_school
Начал изучать алгоритмы месяц назад. Каждый день решаю задачи и изучаю новые темы. Скоро муниципальный этап, готовлюсь к нему. Не уверен что в этом году смогу пройти его, но я пока 10 классе. Думаю, если так же буду заниматься, за 1,5 года смогу знать хорошо алгоритмы и в следующем выиграю всеросс. Ну если получится, надеюсь вспомню и изменю сообщение
Хаха, посоперничаем
Спасибо! (Я слушаю это видео за ночь до олимпиады💀)
3:35 Пять это чётное число? Поколение ЕГЭ во всей красе...
вслушайся,прежде чем писать,он сказал нечётное
Хочу перепоступить на программирование, всегда интересовала эта тема, особенно когда услышала про спортивное программирование Огромное спасибо за материал
привет, увидел твое видео насчёт олимпиадного программирования, хотел узнать, почему c# не подойдёт? он же вроде быстрый(не как плюсы, но уж в разы быстрее питона),у меня есть хорошая база на нем в ооп(промышленном программировании), думаю все же на нем писать всош, высшую пробу и т.д.😊
10:43 Каждую купюру мы можем взять 0, 1 или 2 раза. То есть можно решить задачу за 3^10 = 59049 операций, что существенно меньше чем 2^20 = 1048576
А C# норм вариант?
Очень милая анимация
В детстве я хотел, чтобы у меня был тетрис, в котором я мог добавлять свои фигуры, которых в то время не было в моем тетрисе, чтобы усложнить игру, т.к. с фигурами тетрамино мне играть было не интересно и легко, никаких проблем во время игры не возникало (в brick game я спокойно набирал 100 000 очков, которые сгорали, а я продолжал играть дальше на 9 скорости не проигрывая и так до бесконечности). И вот сейчас у меня такая возможность появилась. С помощью нейросети я создал свой тетрис с самыми разнообразными фигурами от мономино до гексамино и со своими правилами игры. Самому мне эту игру писать не пришлось, это сделала нейросеть по моим запросам. Сделан этот тетрис, не сколько для коммерческой выгоды, сколько для личного пользования. В интернете я нигде не находил подобного тетриса. В нем я сделал возможность игрокам самим выбирать нужные фигуры. Этот тетрис я опубликовал в яндекс играх. Можете его найти через поиск. И назвал я его "Тетромикс" (Название придумал ChatGPT, обосновав: "Название подчеркивают разнообразие фигур и возможность выбора. "Тетромикс" объединяет элементы традиционного тетриса и микс фигур"). Игра была сделана специально для истинных любителей тетриса, которым фигур классического тетриса недостаточно. Им предоставляется возможность самостоятельно сформировать свой набор фигур. В игре представлено 37 самых разнообразных фигур, многие из которых, как правило, отсутствуют в других реализациях тетриса. Также игрок может выбирать уровень игры. С повышением уровня растет скорость игры и размер зарабатываемых очков. Эта игра представляет собой головоломку, построенную на использовании геометрических фигур мономино, домино, тримино, тетрамино, пентамино и гексамино - разновидности полимино. Мономино, домино, тримино, тетрамино, пентамино и гексамино - это виды полимино - плоских геометрических фигур, образованных путём соединения нескольких одноклеточных квадратов по их сторонам. Мономино - состоит из одного квадрата, домино - из двух квадратов, тримино - из трёх квадратов, тетрамино - из четырёх квадратов, пентамино - из пяти квадратов, гексамино - из шести квадратов. В этой игре есть лидерборд. Для того чтобы попасть в лидерборд, необходимо нажать кнопку «Соревнование». В этом случае игрок уже не может выбирать фигуры и уровень: игра начнется с первого уровня, и на начальном этапе будут использоваться фигуры «тетрамино». После достижения игроком 10 000 очков добавятся ещё фигуры «мономино», «домино» и «тримино». В случае, если игрок сможет набрать 20 000 очков, ему станут доступны фигуры «пентамино». А после того, как игрок наберет 30 000 очков, появятся фигуры «гексамино». В лидерборд попадают те, кто больше всех набрал очков. В лидерборде я нахожусь сейчас на первом месте. Сможете сместить меня с пьедестала? По функционалу этот тетрис превосходят аналоги, которые я видел в интернете. Приглашаю всех принять участие в игре и попытаться побить мой рекорд. Хочется мне посоревноваться с сильными игроками со сложными фигурами.
Пайтон за 3 дня)))) смешно.
А - Ижевск С - Пермь Е -Екатеринбург D - Тюмень В - Курган G - Челябинск F - Уфа ))))))
Как работает А-Life?
Очень круто объяснил. Спасибо. Только 1 вопрос: если у нас получится такая ситуация, что расстояние от точки А до D составило бы 5. А расстояние от Е до В доставило бы 3. Тогда по этой задаче, мы бы точку D не проверили? Или мы бы сравнили полученное в итоге время в конечной точке с временем в не изученных городах?
Уже обсуждался этот вопрос) надо сравнивать время)
Кратчайший путь на вертолёте муахахаха))0)0)
Годная локализация, автору респект.
классно
Топчик
Если бы FB весил 3, то алгоритм пропустил бы оптимальный маршрут. Есть улучшенный алгоритм Дейкстры
Тут этот момент вроде учтен, потому как ранее определенный "неоптимальный" маршрут через ребро АС оказался оптимальным, т.е. произошла переоценка
Хм, непонятно. Давай чуть поменяем веса: CD = 2 а EB = 3. Тогда находясь в С мы имеем оценку для E = 4 а для D = 5 и идем в E. Но в реальности маршрут ACEB окажется длиннее чем ACDB. Получается нам нужно делать оценку всех возможных следующих вершин из всех предыдущих - а это в любом случае экспоненциальная сложность.
Мне кажется, что вам необходимо алгоритм реализовать на бумажке, т.к. в голове тяжело одновременно удерживать большое кол-во переменных. Если вес граней изменить, то при проверке вершины "С" у вас "E" = 4, а "D" = 5. Вы проверите "Е" и увидите на вершине "B"=7, но вы не достигните конечного пункта. Т.к. на вершине "D" будет 5. И вам необходимо будет идти в вершину "D" и смотреть её пути. Вы увидите, что из "D" в "B" дорога будет занимать 6. И перезапишите. В оставшихся вариантах, у вас будет выбор идти в "B" или в "G", но в "G"=7, а в "B"=6. И вы достигните конечной вершины.
@@АлександрТитов-в8щ ну то есть как я и говорю - полный перебор графа. Я даже если на очередном шаге при проверке следующих вершин нашел самую дешевую то мне все равно нужно будет зайти и во все остальные и сделать проверки там. Сложность остается экспоненциальной.
Пример c ACEB и ACDB: Когда мы пришли в Е, мы еще не нашли кратчайший маршрут в B. Кратчайший маршрут до вершины мы находим в тот момент, когда эта вершина становится самой ближайшей среди неиследованных. Нам не нужно делать оценку из всех во все. Чтобы разобраться, можно еще раз посмотреть как происходит обновление оценок) Если каким-то образом получилась экспоненциальная сложность вместо полиномиальной - это уже точно не Дейкстра^_^
@@АлександрТитов-в8щ а я кстати понял. На 0:35 не совсем верно сформулирована задача возможно. Алгоритм Дейкстры не для того чтобы найти кратчайшее расстояние от А до Б, он для того чтобы найти кратчайшее расстояние от A до всех вершин.
@@wilcodit ты прав - теоретически получается O(V+E). Если при программировании мы все поиски и обновления сделаем за O(1) например инициализировав граф в виде хэш-таблицы, то итоговая сложность останется и на практике около O(V+E).
Добрый, применял такой подход в своей игре. А ты можешь так же А Star алгоритм объяснить?)
На си лучше не писать a[m], каждый раз будет вычисляться сдвиг, эффективнее двигать адрес указателем
На Си 2×10^8 на ооочень старом железе, обычно как раз от 2×10^9
Большое спасибо, это гениально
Это применяется в компьютерных играх для ИИ? Или где например? 🤔
В интернете чекни, мега много где, если даже не прям на нем, то на версии его.
Этот алгоритм универсален, поэтому его можно использовать в разных сферах. Например, в навигационных системах и картографии алгоритм Дейкстры может помочь проложить маршрут для пешеходов или автомобилей, избегая пробок и выбирая оптимальные дороги. В робототехнике этот алгоритм применяется для планирования движения роботов, чтобы они могли перемещаться в пространстве используя кратчайшие пути и обходя препятствия. В системах бронирования для поиска наиболее быстрых и дешевых билетов с учетом возможных пересадок. В компьютерных сетях алгоритм Дейкстры используется для определения оптимального маршрута передачи данных между узлами сети, минимизируя задержки и повышая эффективность передачи.
Маршрутизаторы в этих ваших интернетах на нём основаны разве? 🤔
@@Leonard_Gray я говорю загуглил, в этом плане я сказал...
А как может ребро быть с отрицательным весом?
Как воздушный шарик! \(^▽^)/ Он имеет самую обычную массу, но отрицательный вес.
@@Leonard_Gray но ведь тут речь идёт о потраченном на дорогу времени. оно не может быть отрицательным
Можно такой пример представить: Вес ребра - это его стоимость, если вес положительный, нужно заплатить, проходя по ребру, а если отрицательный, наоборот, получить деньги
Представьте себе, отрицательные значения люди представляли себе не всегда, как и ноль! ... Не знаю, к чему я это сказал. Просто любопытно это всё.
@@wilcodit С отрицательными весами тоже можно - добавится один проход по всему графу с запоминанием наименьшего отрицательного веса. И при учете ребра - из веса ребра вычитаем это значение.
Как по мне дучше чем остальные но обьяснение хромает
Обьснение достаточно плохое потому что нужно не только анимацию делать, а еще и например показывать на примере отрезков выписанных растояние и тд. А в конце с графом и престановкой это вообще epic fail
Очень доходчиво, спасибо
Почему это видео не попалось мне раньше ? )
Оч круто
Вот где ты был когда я информатику сдавал?
Лайк паписка. Желаю больше просмотров
Как по мне слишком затратный алгоритм, гораздо оптимальнее будет просто аннигилировать связи вершины, а связи везде суммировать. Например между городами C и B находится город D, который можно аннигилировать и получить сумму его связей, значит путь от C до B будет 5. Затем мы убираем C, между которыми 3 и 5, получаем 8 от А до В, 4 от А до Е, и 4 от А до А, что мы исключаем ввиду образования круга. Дальше так продолжаем, пока не останутся все возможные варианты добраться от А до В исключительно в виде связей, без вершин.
Метод аннигиляции можно также соблюсти - но это если точки не соединены с более чем двумя вершинам, иначе удаляя вершины - надо учесть, что мы не один путь описывает, а сразу все...
Легким движением руки получаем О(n^3), вместо О(m log n)
@@wilcodit Если не трудно, откуда O(n^3)?
@@anonsd5521 Если хотим путь V -> T -> U заменить на ребро V -> U, то нужно перебирать вершины V, T, U
@@wilcodit Хорошо, спасибо за пояснение.
Слава ящерам
Преступно мало просмотров и лайков! И подписчиков. Призывай подписаться в конце видео, это работает
Вот вопрос, если бы, например cd было бы меньше чем ce,но bd было бы большим,то вроде как алгоритм не нашел кратчайшего пути
Дело в том, что алгоритм выбирает точку с наименьшим значением среди ВСЕХ неисследованных, и если эта точка и является конечной, то алгоритм останавливается, так как другие пути гарантированно длиннее (ведь путь к одной из ПРОМЕЖУТОЧНЫХ точек другого маршрута дольше, чем весь путь от начальной к конечной) . Например, будь, CD=0,5 и весь путь к D равнялся бы 3,5. Пусть даже BD=3, и тогда значение в точке B было бы равно 7,5 на этой итерации (если было бы больше или равно 8, то путь не установился, так как путь A-F-B был бы короче). Однако, в таком случае алгоритм не остановился бы, так как оставалась бы неисследованная точка E, значение в которой равно 4 (что меньше 7,5 в точке B и в других точках). Снова бы произошло "раскрытие" данного пути, и значение в точке B стало бы равно 6, что меньше любой другой неисследованной точки и, так как эта точка является конечной, гарантировалось бы, что данный путь кратчайший.
Да, но это не было оговорено в ролике, и с другими значениями ребер алгоритм работал бы неверно
@@ankoflвсе оговорено, по этому алгоритму на подобном примере все легко совершается. при условии что расстояние не меньше 0
Мне понравилось, всё чётко и ясно объяснено. Осталось сделать самостоятельную работу и запрограммировать дейкстру
Как по мне шляпа обьяснение
@@ЕвгенийСупремо что не понравилось?
@@ЕвгенийСупремо Можешь лучше объяснить?
Шикарное видео!
Анимация божественна и это не шутка
украл с англ канала)
24 решена неверно
в реальности, статистическая вероятность того что Алень, а это именно он, женится на потребляди во 2 и последующие разы уменьшается в геометрической прогрессии, к тому же остальные Алени не будут сидеть и ждать пока тухляк поюзает один Алень и она отпилит у него половину, потом другой с тем же результатом, у третьего уж точно включится мозг и он сможет усмотреть причинноследственные связи, я уж не говорю о работе МД каналов))) сокращающей поголовье Аленятины в промышленных масштабах, но как математическая задачка наверное интересно))
Перехожу в 10 класс. Углубленно знаю питон + пишу GUI на джаве и знаю основы плюсов. Сейчас выбираю между плюсами и явой для дальнейшего усиленного изучения, ибо хочу попасть на всерос. Понимаю, что надо свичнуться на плюсы, но чето жалко оставлять яву :(((
Привет, так Ява вроде бы не особо подходит для олимпиадной проги, хотя хз, сам новичок. Расскажешь как гуи пишешь и где учился?
Я давно сдала егэ, откуда?😅 тем более, инфу я не сдавала)) единственное, что я знаю об этом предмете со слов ребят из чата курса турбо - то, что это очень сложно
А ты уверен в последней задаче снизил время выполнения? Пример который ты разбираешь - очень простой. фактически ты все сравниваешь только с первым массивом. А ведь массивы могут совпадать по первому элементу, но не совпадать с первым элементом первого массива. Неочевидно, сколько итераций будет - пойдет тот же самый перебор значений КАЖДОГО с КАЖДЫМ ,, да еще в в мапах. Может я чего то не понимаю. я не спорю. но объяснение алгоритма вообще неочевидное, тем более его преимущество перед обычным многоуровневым циклом (первые два обозначают сравниваемую пару, а третий - while() - работает по строкам двух массивов до момента прекращения совпадения элементов или превышения размера минимального из двух массивов. import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws Exception { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out)); final int n = Integer.parseInt(reader.readLine()); int [][] arrays= new int[n][]; int [] sizes = new int [n]; for(int i = 0; i < n; i++) { sizes[i] = Integer.parseInt(reader.readLine()); arrays[i] = Arrays.stream(reader.readLine().split(" ")).mapToInt(Integer::parseInt).toArray(); } long sum = 0; for( int i = 0; i < n; ++i) { for(int j = i+1; j < n; ++j) { int k = 0; int tempSum = 0; while(k < Math.min(sizes[i], sizes[j]) && arrays[i][k] == arrays[j][k]) { tempSum++; k++; } sum+=tempSum; } } writer.write(sum +""); writer.close(); } } Я понимаю, что тут типа рекурсии, но инвариант рекурсии тоже не очевиден из твоего объясгнения, очень все смазано... Уж извини... Очень бы хотелось посмотреть на код. Если не сложно.. Очень. Предыдущая задача мне понравилась - со стэками круто получилось, я обычно стараюсь решать до объяснения. а потом смотреть объяснение, ну я там нагородил конечно, сначала сделал мапы рабов по ключу начальника - но туда вошли все рабы, не только непосредственные, поэтому пришлось переводить его в мап непосредственных начальников для каждого раба, а потом уже по мапам начальников вычислял барьер.
Идея в том, что благодаря мапам, у нас всегда одинаковый префикс (внутри класса). И мы сравниваем всегда по столбику. В результате получается, что мы на каждый элемент смотрим один раз
@@wilcodit Только этих одинаковых префиксов может быть много даже по первой цифре. У некоторых первая цифра будет совпадать но она будет равна скажем 1. У других тоже первая цифра будет совпадать но она будет скажем равна 5. И т.ж. Я не совсем уловил структуру и формирования этих классов может?
Автор видео прям поверхностно изучил тэтрис ведь допустим s блок и s блок идеально сочиться пример: первый s блок перемещаем максимально в лево, второй s блок уже используется такую стратегию: сместить максимально в лево и потом сдвинуть на четыре квадрата в право и когда тот коснётся земли на один квадрат в лево
Молодец, объяснил лучше всех! Так держать!