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

    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 происходит один раз при запуске потока. Или у вас программа очень быстро отрабатывает и накладные расходы на ее старт вы тут и видите, перевешивающие все остальное, или ваша программа запускает очень много потоков. Возможно, это делает какая-то библиотека. Возможно она криво реализована и поддерживает распаралеливание, но вы попросили работать в один поток.
    Написано
  • Как нагрузить расчёт в однопоточной программе C++ до 90-100% на используемом ядре?

    wataru
    @wataru Куратор тега C++
    Alex XYZ, Вы где эти 10-15% видите вообще? Как вы это намеряли?
    Написано