• Чем вызван краш программы?

    wataru
    @wataru Куратор тега C++
    8iKS, Да, точно, адрес же можно тупо вывести. Например из main() и из dllmain(). Не вызывая функцию вообще.

    В дизассемблере видно, что это начало какой-то функции, но я не вижу там никакого вывода в cout. Это точно auth() из поста? Еще, не видно, что там ниже происходит.

    Я вижу, что функция по A1040 ожидает что-то полезное в rcx, кажется указатель на указатель на структуру, положенное туда вызывателем. Но там оказывается что-то не то. По смыслу, это какой-то указатель должен быть в параметрах функции. Но auth() не принимает никаких параметров! Сдается мне, что оптимизатор заинлайнил auth() и ее в екзешнике тупо нет. А нашли вы и вызываете что-то не то.

    Попробуйте сначала без оптимизаций auth скомпилировать (-O0), тогда ассемблерный код будет понятнее и ее не заинлайнит.

    P.s. Вы, вижу, вопрос отредактирвали. Ваш дизассемблер main() показывает, что auth точно заинлайнена. Там нет ее вызова, а сразу вызвыаются функции cout. Удивительно, что там что-то по A1040 вообще есть. Вряд ли это ваша auth().

    Кстати, добавив вывод адреса auth в main вы, вероятно, тоже добъетесь, что оптимизатор ее не выкинет.
    Написано
  • Чем вызван краш программы?

    wataru
    @wataru Куратор тега C++
    rPman,
    а ну это же не принципиально

    Принципиально. Вы совсем не в теме, а копируете вывод булшит-машины. Тут разница как между "как зарядить телефон он пауер-банка?" и "как зарядить пауер-банк от телеофна?". Ни один пункт из скопированной вами инструкции тут не применим вообще.
    Написано
  • Чем вызван краш программы?

    wataru
    @wataru Куратор тега C++
    rPman, На вопрос я ответил. А проблема в отрыжке GPT, что он объясняет, как использовать функцию из библиотеки в экзешнике, а автору надо, наоборот, из dll-ки запустить функцию основного процесса.
    Написано
  • Когда целесообразно использовать именно такую реализацию DSU?

    wataru
    @wataru Куратор тега Алгоритмы
    floppa322,
    лично в моём понимании как раз dsu и должен давать ощутимый выигрыш, когда прилетают рандомные union'ы и добавляются новые элементы через makeSet :)


    Ну, такой паттерн dfs-ом сделать сложно. Только если все union'ы заранее известны. И там эти два подхода не различимы по скорости, в общем-то. Кому что нравится. А если заранее все неизвестно, и надо именно по одному union делать, то DSU - лучше всего.
    Написано
  • Когда целесообразно использовать именно такую реализацию DSU?

    wataru
    @wataru Куратор тега Алгоритмы
    floppa322,
    те реализации, которые я видел, на вики, например, обычно не имели списка всех элементов одного множества, вот, например, та, которую для leetcode/codeforces использую DisjointSetUnion


    Ну так это у вас DSU тарьяна и есть. Вы же процитировали описание "тривиальной" альтернативы. Список элементов в множестве нужен будет для перекраски, чтобы не проходиться по всем n элементам, а только по элементам множества. Иначе объединение будет O(n) а не O(log n) и DSU окажется еще лучше.

    если по какой-то причине не удалось сжать координаты (id элементов множеств), то придётся хеш таблицы использовать, а не плотные массивы


    Ну да, вместо массивов будут хешмапы. Но тогда и в DSU будет хешмап.

    люди зачем-то использовали disjoint set, там где можно было обойтись обычным dfs'ом, и на этой почве как раз и возник вопрос :)


    Я бы в этой задаче тоже dfs использовал. Но, может, кому-то dsu первым в голову придет. Кому-то dsu может показаться проще dfs. Проще писать, проще осмыслить, короче код.
    Написано
  • Чем вызван краш программы?

    wataru
    @wataru Куратор тега C++
    rPman, Не надо копировать отрыжку chatgpt по интернету. Он не понял вопрос, а вы скопировали ответ, вообще не связанный с проблемой. И не проверяли сами. Из-за таких как вы интернет превращается в помойку. Позор!
    Написано
  • Как найти количество помеченных связных графов?

    wataru
    @wataru Куратор тега Алгоритмы
    YSSITJ, Ну и в long long не забудьте считать, чтобы переполнения не было.
    Написано
  • Как найти количество помеченных связных графов?

    wataru
    @wataru Куратор тега Алгоритмы
    YSSITJ,

    for (k = 1; k <= n; k++) {
      ans += (k*((k%2) ? 1 : -1)*C[k])%MOD*Pow2((n-k)*(n-k-1)/2);
      ans %= MOD;
    }


    В C[k] - надо заранее предподсчитать сочетание из n по k элементов. Т.е. С - это n-ая строка треугольника Паскаля.

    Pow2() - функция для возведения 2 в степень по модулю 10^9+7. Считайте там логарифмически, через возведение в квадрат.
    Написано
  • Как найти количество помеченных связных графов?

    wataru
    @wataru Куратор тега Алгоритмы
    YSSITJ, я чуть напутал, надо каждое слагаемое еще на k умножить: +1 для одной вершины, -2 для двух, +3 для трех...
    Написано
  • Почему не удается получить адрес функции?

    wataru
    @wataru Куратор тега C++
    8iKS, GetProcAddress не получает адрес произвольной функции в произвольном исполняемом файле. Она сделана и работает только для получения адреса специально объявленной функции, (обычно) скомпилированной в dll-ку.

    Читайте справку
    Retrieves the address of an exported function (also known as a procedure) or variable from the specified dynamic-link library (DLL).


    Ну вот просто не умеет она делать то, что вы от нее хотите. Чтобы хакнуть экзешник вам надо вручную найти адрес функции, посмотрев на дизассемблерный код. И потом
    Написано
  • Какой правильный класс коллекции для хранения сортируемого списка?

    wataru
    @wataru Куратор тега Алгоритмы
    Более тооо, я предлагал еще по id объектов хранить итератор в списке, чтобы не надо было обходить весь список для поиска объекта. Ну и, я не специалист по жаве, но думаю, что там тоже из дека нельзя удалять элементы из центра. Нужен именно list.
    Написано
  • Как записать это выражение?

    wataru
    @wataru Куратор тега Математика
    historydev, Почему при письме читается слева-на-право? Ну нет особой причины, просто в нашем языке так принято. Вон, в арабском, наоборот - справа-на-лево читается. Так же и числа. Просто в системе с арабскими цифрами как-то так сложилось, что младшие разряды - справа. Никакой особой причины тут нет. Могло бы быть и наоборот.
    Написано
  • Как записать это выражение?

    wataru
    @wataru Куратор тега Математика
    historydev, Ну, так принято. Вон в десятичной системе же справа единицы, а миллиарды - совсем слева. Также и в двоичной. Слева- единицы, потом двойки (вместо десяток), потом четверки (вместо сотен) и т.д.
    Написано
  • Как записать это выражение?

    wataru
    @wataru Куратор тега Математика
    historydev, Иногда и без скобочек пишут, когда из контекста понятно
    Написано
  • Как записать это выражение?

    wataru
    @wataru Куратор тега Математика
    historydev, нижний индекс у скобочек - это стандартное обозначение системы счисления.
    Написано
  • Как записать это выражение?

    wataru
    @wataru Куратор тега Математика
    historydev, "Основание системы счисления". Для двоичной системы - это 2. Для десятичной - 10.
    Написано
  • Почему паралельная сортировка слиянием выполняется на cpu быстрее чем на gpu в 100 раз?

    wataru
    @wataru Куратор тега Алгоритмы
    Данные-то проверяли, оно сортирует вообще? Не тормозит ли загрузка и выгрузка данных с GPU?
    Написано
  • Почему появляется лишний символ при открытии файла qt C++?

    wataru
    @wataru Куратор тега C++
    А, проблема в 6. Откройте файл в Hex редакторе, что там в начале-то? Потому что, если вы его блокнотом открваете, а это какой-то странный символ, вы его не увидите. Скорее всего проблема с файлом из-за "передачи по сокетам".
    Написано
  • Почему появляется лишний символ при открытии файла qt C++?

    wataru
    @wataru Куратор тега C++
    Если этот файл открыть в каком-нибудь hex редакторе, нет ли там в начале этих же нулевых байтов?
    Написано
  • Что не так в решении задачи?

    wataru
    @wataru Куратор тега C++
    Алексей Уколов, Автор, очевидно, где-то почерпнул вдохновление с правильного решения с массивом. Но не смог воспроизвести его полностью.
    Написано