• Алгоритм переворота строки как реализовать?

    wataru
    @wataru
    Test-username-1642, Очень голословное утверждение. Вы уверены? Это джаваскрипт. Там память выделяется на каждый чих. Вы можете гарантировать что выполнение xor не выделит новую переменную? Если же там происходит jit компиляция, или мы говорим про какой-нибудь другой язык более бережливый к памяти, то тут тоже нет приемущества по памяти, потому что есть такая вещь, как регистры процессора. Поэтому никакого потребления памяти для переменной tmp не будет в 99.99999% случаев.
    Написано
  • Алгоритм переворота строки как реализовать?

    wataru
    @wataru
    Test-username-1642, Можно, конечно, но зачем? Операций будет все так же 3 штуки, однако код станет менее понятен. С учетом, что автор запутался в циклах в таком простом алгоритме - это точно не то, что стоит делать.
    Написано
  • Как корректно распределить сумму внутри элементов массива?

    wataru
    @wataru Куратор тега Алгоритмы
    Евгений, Ну допустим это цены не в рублях, а в копейках. Вам надо 7 копеек раскидать по позициям в которых amount 5 и 3. Это без разбиения позиций невозможно вообще. Вам можно разбивать позиции? Можно получать скидку прмерно целевую +- несколько копеек?
    Написано
  • Как корректно распределить сумму внутри элементов массива?

    wataru
    @wataru Куратор тега Алгоритмы
    Евгений, вообще, а что вы ожидаете в этом случае, например?
    {
       "items":[
       "discount":7,
       "total_price":530,
       "total_price_final":523,
          {
             "id":1,
             "name":"Item #1",
             "artikul":"110062600000",
             "price":100,
             "amount":5,
             "total": 500
          },
          {
             "id":1,
             "name":"Item #2",
             "artikul":"110000800000",
             "price":10,
             "amount":3,
             "total":30
          }
       ]
    }


    Тут дело в том, что вообще нельзя эти 7 рублей скидки раскидать по товарам в группах 5 и 3, потому что 7 нельзя представить в виде суммы троек и пятерок.

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

    wataru
    @wataru Куратор тега Алгоритмы
    Я правильно понимаю, что у вас числа целые? Надо целую скидку в рублях раскидать по целым ценам товаров?

    Тут проблема возникает из-за разного amount у товаров. Поэтому в примере каждый рубль брошенный на второй товар - это 6 рублей скидки, так?

    Можно ли вам разбивать товары из одной группы на 2? Скажем, вот у вас 6 товаров "item 2", можно ли в ответе двум из них сделать скидку 356 а четырем оставшимся - 355? Тогда в ответе будет две записи для "item 2" с разными ценами и amount 2 и 4.

    Надо ли обязательно делать скидку примерно пропорционально цене товара?
    Написано
  • Почему не получается записать данные в память?

    wataru
    @wataru Куратор тега C++
    disney1337, Какого класса? Вы вызваете какие-то методы, но что это за методы - непонятно. Я ни одного вхождения "nAllocateVirtualMemory" в гугле не нашел.

    Это какой-то вами написанный метод. Вы говорите, что он возвращает ошибку. Ну вот вам не могут сказать, в чем ошибка в вашем методе не видя его кода!
    Написано
  • Почему не получается записать данные в память?

    wataru
    @wataru Куратор тега C++
    Что за mem? Функции точно nAllocate... а не ntAllocate...?
    Написано
  • Почему объект не передается по ссылке?

    wataru
    @wataru Куратор тега C++
    Mikhail, Нет, тут вызывается оператор присванивания. И до этого для nbox вызывается конструктор по умолчанию. Но ни того, ни другого у вас не определено.
    Написано
  • Как доказать что мы действительно не пропустим такую пару i,j которая дает правильный ответ в методе двух указателей?

    wataru
    @wataru Куратор тега Алгоритмы
    Егор Полянский, еще вариант: можно доказать, что ваш алгоритм выкидывает из рассмотрения точно не нужные пары.

    Если a[0]+b[n-1]<c, то a[0] - слишком маленькое. Даже с максимальным b оно дает слишком маленкую сумму, а значит любая пара с a[0] не наберёт искомую сумму, ведь остальные пары еще меньше. Значит, можно a[0] выкинуть из рассмотрения. Точно также можно выкинуть b[n-1], если сумма слишком большая.

    Поскольку мы ни одну пару с искомой суммой из рассотрения не удаляем, ответ найдется.

    Можно это и через инвариант доказать. В начале цикла, если в массиве есть искомая пара i', j', то i' >= i и j' <= j. После манипуляций этот инвариант сохраняется.
    Написано
  • В чем суть ассиметричного графа?

    wataru
    @wataru
    Допустим в верхнем левом примере поменять две верхние вершины (являющиеся условным дном треугольника) местами?


    Вы при перестановке вершин должны все их связи оставить такими же. Если вы поменяете местами только 2 верхние вершины, у вас будут две диагональные линии. вместо вертикальных. Если же вы поменяете местами 2 левые вершины с 2 правыми, то у вас будет слева уже 2 вертикальные линии, а не одна.

    В ассиметричном графе, как не переставляй - картинка будет другой.
    Написано
  • Почему в данном случае не работает обращение к элементам массива по индексу?

    wataru
    @wataru
    Mors Clamor, Да, естественно, единственный способ с этим работать в паскале - это указатели. Но в си, повторюсь, разницы с массивами нет, поэтому оно там вполне работает и через table[i]
    Написано
  • Почему в данном случае не работает обращение к элементам массива по индексу?

    wataru
    @wataru
    Mors Clamor, Потому что так в winapi сделано. Потому что оно разработано для си - а там массивы это указатели и размер вообще никак к нему не привязан. Поэтому в си нет проверки на выход за границы массива и программисты как-то сами должны длину массива отдельно протаскивать.

    В pascal по другому - там у всех массивов или длина известна во время компиляции и она проверяется при каждом обращении, или это массивы переменной длины и там длина где-то внутри массива хранится. Второе нельзя тут использовать, потому что массив-то сишный, длины в нем нет. Для первого надо какую-то длину взять.

    Вообще, большинство таких win32 api не используют массивы, а там тупо указатель и количество записей, чтоб таких проблем не было. Это апи, видимо, идет еще с самих древних времен, поэтому оно криво задизайнено.
    Написано
  • Как получить нужное значение на разных версиях виндовс?

    wataru
    @wataru Куратор тега C++
    humanabout, В с++ так-то нет рефлексии*. Единственные способы в рантайме выбрать какие-то разные данные это через control flow: if/else, switch/case или подобным образом выбрать одно из зашитых значений.
    Можно упростить код используя трюки с константыми массивами, как я сказал, что будет похоже на ваш код и вполне читаемо.

    Выбрать одну из даже статичных структур по имени никак не получится во время рантайма.

    *В новых стандартах что-то из рефлексии вроде даже пытаюстя протащить, но я не уверен, что оно вам поможет.
    Написано
  • Как исправить ошибку "выражение должно иметь константное значение"?

    wataru
    @wataru Куратор тега C++
    1) Код оберните в тег code, иначе вопрос удалят.
    2) Где происходит ошибка? приведите полный вывод компилятора, он там говорит про строчку, приводит кусок кода и иногда даже подсказывает что и как исправить.
    Написано
  • Как релизовать A* на three.js?

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

    wataru
    @wataru
    Оберните код в тег code. Иначе вопрос удалят
    Написано
  • Есть ли у этой задачи название?

    wataru
    @wataru Куратор тега Алгоритмы
    floppa322, Да, скорее всего. ЛП будет эффективнее. SAT у вас будет экспоненциальное количество условий.
    Написано
  • Как нагрузить расчёт в однопоточной программе C++ до 90-100% на используемом ядре?

    wataru
    @wataru Куратор тега C++
    Alex XYZ, А питон там откуда? Судя по всему у вас все тормозит из-за накладных расходов на старт потоков. Возможно это кривая реализация интерфейса между питоном и Си. В результате чего каждый вызов сишного кода из питона создает новый поток для выполнения очень простой и короткой операции. Возможно быстрее этот интерфейс сделать никак и нельзя, я тут не специалист.

    Если вы действительно используете сишный код из питона, то вам надо засунуть в Си почти всю логику, чтобы было мало вызовов из питона и они работали долго. Если выдавать сишному коду по чуть-чуть работы (например, сложить 2 числа), то это будет дико тормозить.
    Написано
  • Как нагрузить расчёт в однопоточной программе C++ до 90-100% на используемом ядре?

    wataru
    @wataru Куратор тега C++
    Alex XYZ, RtlUserThreadStart происходит один раз при запуске потока. Или у вас программа очень быстро отрабатывает и накладные расходы на ее старт вы тут и видите, перевешивающие все остальное, или ваша программа запускает очень много потоков. Возможно, это делает какая-то библиотека. Возможно она криво реализована и поддерживает распаралеливание, но вы попросили работать в один поток.
    Написано