• Можно практический пример где можно использовать очередь на двух стеках?

    @Mercury13
    Программист на «си с крестами» и не только
    В разных необычных структурах данных.
    https://habr.com/ru/articles/483944/
    Вот очередь, поддерживающая за амортизированное O(1) необратимую ассоциативную операцию (например, минимум).
    А это, в свою очередь, позволяет за O(N) эту самую необратимую ассоциативную операцию вычислить в окнах по 10 (или по 20, или по 100).
    Ответ написан
    Комментировать
  • Как написать игровой движок?

    @Le0Wolf
    C# Developper
    Вам точно нужен именно движок? Сейчас, как минимум, есть Unity, Unreal Engine - на последнем, в том числе и AAA игры делают. Если вы хотите именно создать игру, то лучше начните изучать один из существующих движков. Больше того, у них есть и магазины скриптов и ресурсов, где вы можете либо за бесплатно (редко), либо за денежку взять готовые механики, модели, текстуры, звуки и т.д.
    Движок свой вам нужно разрабатывать только в 2-х случаях:
    1) у вас какая то совершенно уникальная концепция игры, которая не ложится на современные движки (что вряд ли)
    2) Вы хотите понять, как это устроено, как ведётся разработка игровых движков, встать миллион раз на грабли и понять, как их обходить. В этом случае, вы просто должны принять как факт, что с 99.99999% вероятности вы до создания игры на нем никогда не дойдете.
    Просто примите как данность, что игровой 3d движок, тем более для шутера (небось ещё и онлайн хочется?) - это ОЧЕНЬ сложно и это задача не для одного человека. Точнее можно конечно и одному... Но пока вы будете его писать, используемые вами технологии уже устареют).

    Но если все же решитесь, то сразу говорю, SFML - это точно не основа для 3D движка. Да, там есть работа с мышью, клавиатурой и пр. Но реализовано это явно не для поддержки разработки 3D игр типа шутеров. Изучайте WinAPI (создание окна, обработка оконных событий), OpenGL (3D графика), всякие там XInput и RawInput - ввод. И вообще, по максимуму используйте готовые библиотеки (к примеру, есть Assimp, FMOD) - это сильно ускорит разработку.
    Если хочется прям совсем хардкора,то изучайте DirectX 12, Vulkan и тому подобные низкоуровневые абстракции железа
    Ответ написан
    1 комментарий
  • Как написать игровой движок?

    @lea
    Jason Gregory "Game Engine Architecture" (три издания, третье точно есть на русском)
    Gabor Szauer "Hands-On C++ Game Animation Programming"
    David Wolff "OpenGL 4 Shading Language Cookbook" (есть издание на русском - "Open GL 4. Язык шейдеров")

    +можно поковыряться в опенсорсных движках, например, quake 3
    Ответ написан
    Комментировать
  • Почему на leetcode различается скорость одного и того же кода?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Там скорость выполнения зависит от фазы луны. Забей.
    Ответ написан
    Комментировать
  • Контринтуитивный синтаксис объявления нескольких переменных одного типа?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    можно подумать, что при объявлении указателя, символ * относится к имени(не как часть, а как что-то зависящее от него), а не к типу.

    Если взять стандарт языка (например C99) и почитать главы Declarations, Type Specifiers и Declarators, то можно увидеть, что он разделяет declaration-specifiers, в который входят только слова и declarators, в который входят скобочки и звёздочки. Т.е. твой вывод по сути верный.

    Там же можно увидеть, что часть называемую declarator всегда можно обернуть в скобки, из чего можно извлечь следующий вывод: часть объявления вокруг которой можно поставить скобки самым широким образом относится к конкретному идентификатору, оставшаяся часть -- ко всему списку. Т.е. const char *a, b; можно превратить в const char (*a), b, но нельзя превратить в const (char *a), b или в char (const *a), b.

    Ну и напоследок стоит добавить, что такая интерпретация объявления не следует ни из чего с необходимостью, это просто решение которое было принято разработчиками языка. Они могли принять это решение по-другому и тогда уже другие конструкции вызывали бы наше удивление.
    Ответ написан
    2 комментария
  • Скомпилированный в GCC exe файл вылетает досрочно?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Но в режиме отладки всё, как я уже писал выше, работает.

    Да не, это только видимость. Смотри:

    $ gcc -std=c99 -O2 -g3 -fsanitize=address main.c acp.c md5.c -o main
    $ ./main
    Base64('Hello') = "SGVsbG8="
    MD5('Hello') = "8b1a9953c4611296a827abf8c47804d7"
    =================================================================
    ==1045705==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x604000000071 at pc 0x7fb0d46486f8 bp 0x7ffd0affb580 sp 0x7ffd0affad30
    WRITE of size 33 at 0x604000000071 thread T0
        #0 0x7fb0d46486f7 in __interceptor_strcat ../../../../src/libsanitizer/asan/asan_interceptors.cpp:377
        #1 0x564b2388c0de in prepareKeys /home/jcmvbkbc/tmp/toster/1331202/alphacrypt2/acp.c:263
        #2 0x564b2388cac4 in acraw /home/jcmvbkbc/tmp/toster/1331202/alphacrypt2/acp.c:319
        #3 0x564b2388d8c2 in acraws /home/jcmvbkbc/tmp/toster/1331202/alphacrypt2/acp.c:401
        #4 0x564b2388d8c2 in acraws_basic /home/jcmvbkbc/tmp/toster/1331202/alphacrypt2/acp.c:409
        #5 0x564b2388a62e in testSimpleEncryption /home/jcmvbkbc/tmp/toster/1331202/alphacrypt2/main.c:20
        #6 0x564b2388a368 in main /home/jcmvbkbc/tmp/toster/1331202/alphacrypt2/main.c:111
        #7 0x7fb0d44461c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
        #8 0x7fb0d4446284 in __libc_start_main_impl ../csu/libc-start.c:360
        #9 0x564b2388a440 in _start (/home/jcmvbkbc/tmp/toster/1331202/alphacrypt2/main+0x3440)
    
    0x604000000071 is located 0 bytes to the right of 33-byte region [0x604000000050,0x604000000071)
    allocated by thread T0 here:
        #0 0x7fb0d46b89cf in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:69
        #1 0x564b2388fee7 in md5StringHash /home/jcmvbkbc/tmp/toster/1331202/alphacrypt2/md5.c:227
    Ответ написан
  • Что не так с кодом, работающим с графом?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Тебе не нужен dfs или bfs. Просто обойди циклом все вершины по массиву вершин, и для положительных увеличивай все соседние
    Ответ написан
    8 комментариев
  • Как хранится struct в памяти?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Зависит от компилятора и заданных при компиляции опций. Например, при плотной упаковке (#pragma pack(1)) каждый элемент структуры занимает ровно столько, сколько ему необходимо. А при выравнивании на 64 бита (#pragma pack(8)) под каждый элемент выделится память, кратная 8 байтам и достаточная для размещения элемента. Для разных архитектур процессоров могут быть доступны разные настройки выравнивания.
    Ответ написан
    Комментировать
  • Где могла закрасться ошибка?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Если взять турнирную сетку на 2^N человек (или N раундов), то можно ещё составить рекуррентную формулу вероятности встречи P(N)

    P(1) = 1
    P(N) = 1/(2^N - 1) + (2^N - 2) /(2^N - 1) * 1/4 * P(N-1)

    2^N - это 2 в степени N

    здесь первое слагаемое для случая, когда второй игрок в самом ближайшем раунде встречается с первым
    второе слагаемое - все остальные случаи, для которых с вероятностью 1/4 оба игрока выиграют раунд и далее встретятся с вероятностью P(N-1)

    теперь по индукции можно доказать, что P(N) = 1/2^(N-1)
    Ответ написан
    Комментировать
  • Какой есть учебник или книги по схемотехнике?

    @vanyamba-electronics
    Гуглите "теория электрических цепей учебник".
    Например вот.
    Ответ написан
    1 комментарий
  • Как из первых N натуральных чисел составить максимальное количество пар, суммы которых являются простыми?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Для начала можно построить таблицу простых чисел от 1 до 2N, например с помощью решета Эратосфена. Теперь ты сможешь проверять, что число (или, например, сумма двух чисел) простое, за O(1), то есть быстро.

    Далее, как известно, простое число больше 2 всегда нечетное, т.е. оно есть сумма четного и нечетного. Соответственно, все четные числа - в одну кучку, нечетные - в другую. И в каждую пару брать из разных кучек. Вот так и получается, что у тебя тут двудольный граф, в котором числа - вершины, и есть ребро, если сумма двух вершин простая. Задача называется вроде бы "о максимальном паросочетании" или что-то вроде того.
    Ответ написан
    1 комментарий
  • Какой есть учебник или книги по схемотехнике?

    @chnav
    Я недавно наткнулся на ролики Major Tom Workshop, у него целая серия роликов про чтение схем. Я вроде знаком с электроникой (пусть и не очень глубоко) не первый десяток лет, но у человека просто дар объяснения - всё грамотно и по-военному чётко. Для примера посмотрите устройство компьютерного БП, а оттуда по ссылкам на более простые вещи. А потом можно браться и за учебник Хоровица и Хилла ))
    Ответ написан
    Комментировать
  • Какой есть учебник или книги по схемотехнике?

    @nehrung
    Не забывайте кликать кнопку "Отметить решением"!
    Первым напрашивается Хоровиц и Хилл "Искусство схемотехники" , но не самые последние переиздания. Поскольку в них были обнаружены кучи ошибок, люди рекомендуют трехтомник 1993 года.
    В моё время был популярен справочник В. Шило "Линейные интегральные схемы" - но это для тех, кто хочет освоить аналоговую схемотехнику на ИС. Под его же авторством есть и справочник "Популярные цифровые микросхемы", для желающих освоить цифровую схемотехнику.
    А для совсем начинающих, разумеется, всяческие "Справочники юного радиолюбителя" (особенно выпуски Массовой радиобиблиотеки - МРБ), например, известная книга Р. Свореня "Электроника шаг за шагом" или книжки В. Борисова.
    Разумеется, этим список рекомендаций не ограничивается, по запросу "справочники по схемотехнике" Гугл выдаёт более 200 тысяч ссылок.
    Ответ написан
    Комментировать
  • Почему метод push_front() работает неправильно?

    axifive
    @axifive
    Software Engineer
    Опечатка, посмотри на конструктор узла повнимательнее.
    ...
    Node(T data = T(), Node* (pnext) = nullptr) {
          this->pNext = (pNext);
    ...
    Ответ написан
    Комментировать
  • Как узнать могут ли 2 квадратных уравнения иметь общие корни?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Находите решения (корни) обоих уравнений в общем виде, получаете две пары решений, приравниваете их попарно, получаете четыре уравнения, решаете их относительно m, получаете значения m при которых корни совпадают.
    По количеству - для каждого уравнения записываете дискриминант, определяете его знак в зависимости от m, получаете диапазоны с нулём, одним и двумя действительными корнями. Затем смотрите пересечения диапазонов разных уравнений и выделяете точки с совпадающими корнями, полученные в первой части решения, находите области с разным количеством корней.
    P.S. Общие корни есть при m = 1 и m = -3
    x2 + x - 6 = 0, x1 = 2, x2 = -3
    x2 -3x + 2 = 0, x1 = 2, x2 = 1
    Общий корень x = 2.
    При m = -3 уравнения становятся тождественными.
    Ответ написан
    Комментировать
  • Какие темы самые важные для олимпиадного программировании в книге Кормена «Алгоритмы. Построение и анализ»?

    Alexandroppolus
    @Alexandroppolus
    кодир
    к ответу выше ещё можно добавить Часть IV.
    этих штук (особенно ДП) будет завались.
    Ответ написан
    3 комментария
  • Как преобразовать std::function в указатель на функцию?

    @sergiodev
    Как вариант можно так сделать:

    1. Запомнить указатель на объект (this) в какую-то глобальную переменную
    2. Создать обычную функции в соответствии с параметром WlanRegisterNotification и передать её туда
    3. В теле функции достать указатель на экземпляр из глобальной переменной и далее работать с ним

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

    Если вы работаете с функцией https://learn.microsoft.com/en-us/windows/win32/ap... из Windows API, то там есть параметр context как раз для передачи контекста в callback. Можно положить туда this и позже достать из контекста внутри вашей callback-функции.
    Ответ написан
    2 комментария
  • Как сделать поиск папки у которой будет промежуточный каталог?

    Vindicar
    @Vindicar
    RTFM!
    Рекурсивно перебирать все каталоги, для каждого каталога проверять совпадение пути с шаблоном.
    Ответ написан
    Комментировать