• Как решить эту задачу?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    У вас 7 неизвестных и 3 уравнения. Так что однозначно вы найти значения переменных никак не сможете. Но и найти вам надо какую-то сумму. Есть шанс, что как-то комбинируя, складывая, вычитая и домножая левые части этих уравнений можно получить искомую сумму. Иными словами, вам надо вектор (16, 25..100) представить в виде линейной комбинации векторов (1, 2..49), (4, 9..64) и (9, 16..81). Обратите внимание, что там везде получаются суммы трех квадратов равны следующему.

    Вам надо подобрать такие 3 коэффициента, что x*n^2 + y(n+1)^2+z(n+2)^2 = (n+3)^2. Для n=1..7. У вас тут квадратные многочлены от n получаются, равны они в 7 точках, так что они должны быть равны вообще при любых n. Значит, вам надо раскрыть скобки, сгрупировать степени n и приравнять к 0 все коэффициенты.

    Так вы получите 3 уравнения на 3 переменные x, y, z.
    x+y+z=1
    2y+4z=6
    y+4z=9

    Отсюда получается x=1 y=-3 z=3

    В итоге получаете 1*1-3*12+3*123 - это ваш ответ.
    Ответ написан
    2 комментария
  • PostgreSQL. Порядок сортировки. Можно ли запросом изменить порядок сортировки, чтобы сначала сортировались записи ru, а после en?

    @Everything_is_bad
    например, создать свое правило https://postgrespro.ru/docs/postgresql/16/collatio...
    или сделать в два запроса, сначала кириллицу, потом латиницу и объединить результат (так себе идея)
    Ответ написан
    Комментировать
  • Как оптимизировать код с++ с рекурсией в времени?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Можно попробовать сделать микрооптимизации: функция F реализуется одним циклом (делите, пока делится на 10, потом берите последнюю цифру). S тоже можно считать циклом, а не рекурсией.

    Но скорее всего, этого не хватит. Это решение за O(q*log(q)). Ограничения на числа в условии не видно, но если там что-то порядка 2000000000, то ваша программа будет считать несколько секунд.

    Надо хорошенько подумать и применить математическую хитрость. Надо как-то считать числа в интервале p...q пачками, а не каждое отдельно.

    Что такое функция F? Это последняя ненулевая цифра в числе. Давайте вместо суммы значений F счиатать, сколько чисел из интервала дадут вот такое вот значение? Ну просто по последней цифре сложно сказать, сколько там чисел, а вот если еще зафиксировать количество пропущенных в конце нулей, то уже становится понятно, как подсчитать это. Вот допустим, вы считаете последнюю цифру d и там должно быть 3 нуля. Тогда вы ищети числа вида "xxxd000". Или их можно представить в виде d*1000+x*10000 для произвольного неотрицательного x. И вот вам надо подсчитать сколько таких чисел в интервале [p,q]. Ну решите 2 уравнения: d*1000+x*10000 >= p и d*1000+x*10000 <= q

    Таким образом вы за несколько арифметических действий и одну проверку можете подсчитать, сколько чисел вида "xxxd000" будут в интервале. Осталось циклом перебрать d от 1 до 9 и количество нулей от 0 до длины q. И вот у вас решение за O(log(q)).

    Edit:
    Вот код быстрого решения:
    int S(int p, int q) {
      int sum = 0;
      for (int d = 1; d < 10; ++d) {
        for (int tens = 1; tens <= q; tens *= 10) {
          int left = p - d*tens;
          if (left < 0) left = 0;
          else left = (left + 10*tens-1)/(10*tens);
          int right = q - d*tens;
          if (right < 0) right = -1;
          else right /= 10*tens;
          sum += d*(right - left + 1);      
         }
      }
      return sum;
    }
    Ответ написан
  • Как можно разделить данный код (см. ниже) по header'ам и cpp'ам, учитывая зависимости в нём?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как я могу это сделать?

    Разносишь определения классов по файлам *.h. Разносишь определения методов классов по одноимённым файлам *.cc, инклудишь в них одноимённые *.h Потом смотришь на свою картинку. Стрелки наследования и агрегации добавляют include <файл в конце стрелки> в h файл в начале стрелки. Стрелки использования добавляют include <файл в конце стрелки> в cc файл в начале стрелки.
    Ответ написан
    1 комментарий
  • Доступ к массиву объявленному в ассемблере из Си?

    @none7
    Это с точки зрения Ассемблера array это адрес. А с точки зрения Си uint32_t* array это глобальная статическая переменная в которой лежит указатель на uint32_t или соответствующий массив . То, что в Ассемблерах выглядит примерно так array_ptr dd offset array. А так как это bss, то естественно, что в этой переменной лежит ноль.
    Ответ написан
    4 комментария
  • Какой бюджетный набор для пайки плат можно собрать?

    @kalapanga
    1) Паяльная паста - это припой, только не в виде проволочки на катушке, а в виде пасты. Пасту не отмывают с платы. Отмывают флюс.
    2) Паяльная маска. Термостойкое покрытие защищающее те участки платы на которые не должен попадать припой при пайке компонентов. В дальнейшем защищает плату от воздействия окружающей среды. Полимеризуется под воздействием ультрафиолета.
    3) Флюс. Удаляет окислы с контактных площадок и выводов компонентов. Способствует лучшему растеканию припоя по площадке. Обязательной тщательной отмывки требуют кислотосодержащие флюсы.
    4) Всё так. Нужен и пинцет, если работаете со всякой мелочью. При работе с феном окружающие детали прикрывают фольгой, если нет цели сдуть с платы всё. Из крупного оборудования в профессиональных мастерских есть установки с нижним и верхним подогревом печатной платы. Из мелочовки на вскидку вспомнилась оплётка для удаления припоя, иногда удобен оловоотсос, всякие мочалки-губки для очистки жала паяльника в процессе пайки. Ну и конечно спирт для отмывки в конце!

    А что касается набора для себя, то если Вы первый раз с подобными процессами сталкиваетесь, то разумеется Вам не потребуется всё и сразу. Вряд ли Вы будете начинать сразу с реболлинга BGA.
    Ответ написан
    Комментировать