• Как заставить нейронку на Python подгонять коэффициенты уравнений?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Тут не нейронка нужна, а регрессия. Ну или тупо система линейных уравнений.
    Ответ написан
  • Как найти Среднее арифметическое элементов массива через рекурсию?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Подумайте, как можно рекурсивно считать сумму. Далее, среднее арифметическое элементарно выражается через сумму, а сумма - через среднее арифметическое. Вот и получается формула:

    Avg(a1,a2,...an) = (Avg(a2,...an)*(n-1)+a1)/n
    Ответ написан
    Комментировать
  • Какую ошибку допустила в цикле?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Зачем там while True?

    Почему сравнение с 1 в условии? Вроде как результат сравнения будет True или False.

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

    Ну и, последнее. В условии натральные значения x и y, а у вас циклы перебирают и отрицательные значения.
    Ответ написан
  • C++ WinForm Как правильно вывести массив структур переданный через указатель?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    auto ch_kol() {
        baseProgr base[max];
        return &base;


    Вы тут возвращаете адрес локальной переменной. Так делать нельзя. При выходе из функции локальная переменная перестает существовать и у вас указатель на фигню остается.

    Переменная должна быть глобальная, частью класса или выделятся через new.
    Ответ написан
    Комментировать
  • Что требуется в задаче Python?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Перечитайте условие медленно. Посмотрите пример.

    В первой задаче надо выбрать какие-то числа, в числах выбрать какие-то цифры (всего не более k цифр) и заменить их другими цифрами так, чтобы сумма увеличилась как можно больше. Очевидно, что заменять надо старшие цифры и всегда на 9. Поэтому можно сразу сказать, что если мы в числе 128694 заменяем 3 цифры - то это "128" и получится 999694.

    Особый случай тут, если число содержит девятки - их надо пропустить.

    Теперь задача немного упрощается. Надо распределить k цифр по числам, чтобы получить максимум профита, т.е. увеличить максимально сумму чисел.

    Можно еще немного порисовать тесты на бумажке и понять, что каждое число можно рассматривать как набор цифр. Каждая цифра отдельна. Ибо замена одной цифры увеличит сумму на (9-цифра)*10^(разряд цифры) независимо от остальных цифр. Т.е. задача еще преобразуется - есть куча цифр каждая с известным профитом, если ее заменить. Надо не более k из них взять, так что бы сумма изменения была максимальна.

    Теперь понятно, что задача решается сортировкой. Считатете для каждой цифры сумму профита, все это складываете в массив (длины максимум 10*n). Сортируете по убыванию и берете сумму первых k значений.

    Вотрая задача - опять же медленно читайте. Я не могу за вас понять. Объяснить как-то проще условие тоже не могу. Попробуйте порисовать тесты в виде пронумерованных точек, от которых стрелочки идут к значению a[i] - кому они дают подарки. Вам надо ровно одну стрелочку переместить так, что бы все стрелочки замкнулись в один круг.

    Для решения надо понять, а что будет, если не менять ни одно число? Путь из точки 1 будет или циклом или чем-то вроде цифры "6". Сначала какой-то хвост, который зацикливается где-то на середине.

    Во втором случае понятно что делать - надо последний шаг завернуть назад на начало хвоста, вместо середины. Если при этом в пути уже все вершины, то это ответ.

    В первом случае сложнее. Если путь уже проходит через все вершины, то ничего не сделать. Если что-то изменить цикла по всем вершинам не получится. Если же там не все вершины, то замена должна пойти в какую-то невключенную вершину, обойти их все и вернутся к циклу. Поэтому надо найти единственную вершину, в которую не ведет ни одна стрелка, убедится, что путь от нее пройдет все не включенные в цикл вершины и воткнется в цикл. И тогда надо предыдущую стрелку перед точкой втыкания в цикл развернуть на начало внешнего пути.
    Ответ написан
    Комментировать
  • Сураквввввввввввв?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Перепроверьте сколько пробклов в каждой строчке. Нет ли там табов?

    В питоне нет фигурных скобок, как в си, или begin/end, как в паскале. Содержимое блока (if/for) выделяется отступом.
    Ответ написан
    Комментировать
  • Как правильно оформить шаблон функции в классе с++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    В template<> в хедере надо оборачивать весь класс, а не каждую функцию по отдельности.

    Посмотрите примеры.
    Ответ написан
    Комментировать
  • Запуск приложения на стороне клиента из php на web- странице?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Если приложение уже стоит в системе и зарегистрировало определенные ссылки/типы файла как свои, то можно на странице просто сделать ссылку. По клике на нее броузер, если все настроено, спросит: а не хочет ли пользователь открыть ссылку в этом приложении.

    Сделать это незаметно для пользовател в браузере невозможно из-за соображений безопасности.
    Ответ написан
    2 комментария
  • Как написать функцию добавления/удаления элемента в массив?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    На Си будет практически то же самое. Только вместо new надо делать malloc, а вместо delete - free.
    Ответ написан
    4 комментария
  • Как работает эта часть кода?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    % 10 - дает остаток от деления на 10. Что то же самое, то последняя цифра числа. /= 10 - делит нацело на 10, или отбрасывает последнюю цифру.

    Вот так этот цикл и пробегается по всем цифрам числа a.
    Ответ написан
    Комментировать
  • Ошибка в игре на Qt (C++) Аварийное завершение, как решить?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Запустите в дебаггере. Где-то обращаетесь по нулевому адресу, или выходите за границу массива, или на 0 делите. Так по простыне кода не поймешь, в чем проблема. Скорее всего забыли где-то создать объект.

    Дебаггер покажет конкретную позицию, где произошла ошибка. Там уже, видя, какая переменная некоректна надо смотреть логику вокруг нее.
    Ответ написан
    4 комментария
  • Почему не работает dynamic_cast?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Определение функции шаблона должно быть inline в .h файле (вставьте код из code.cpp в code.h).

    Ну, или в code.cpp файле добавьте куда-то строку
    findViewById<WEngine::TextView*>;

    Это все потому, что в C++ архаичная система хедеров. Когда компилится main.cpp, он не видит определения метода, только декларацию из code.h. Когда компилится code.cpp, он не знает, что main понадобится инстанциирование шаблона с каким-то типом. Поэтому не создает его. А потом линкер уже ругается, что не может найти функцию.
    Ответ написан
    Комментировать
  • Как возвести в степень значение biginteger на biginteger?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Отличное свойство модуля в том, что можно при вычислениях брать модуль на каждом этапе (если нет делений - в этом случае надо искать обратное по модулю). Поэтому исходное выражение можно переписать так: (g^m mod n^2) * (r^n mod n^2) mod n^2

    И код вычисления этого такой:
    nn = n.multiply(n);
    res = g.modPow(m, nn).multiply(r.modPow(n, nn)).mod(nn);
    Ответ написан
  • E1696 не удается открыть источник файл "stack.h"?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Компилятор не может найти файл stack.h. Этот файл вы сами должны создать в проекте и чем-то наполнить.
    Ответ написан
  • Что не так с поиском математического ожидания?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    У вас ошибка в вычислении difference. У вас там лишние минусы при переносах строки. Компилятор не работает с переносами строки, как в школе в тетрадке. Не надо ставить знак в конце строки и в начале следующей. Надо только один знак поставить. Компилятор проигнорирует перенос строки и увидит A - - B, что будет тоже что и A+B.

    Только после исправления ваше решение, скорее всего, не пройдет по времени. Потому что K до 10^16 в задаче и вы итерируетесь до него.

    Преобразуйте вашу формулу для difference - вынесите за скобки chess[i].number. Получите что-то вроде abs(chess[i].number*A + B).

    И найти минимум этой линейной функции можно в одно действие - это -B/A. Но это если искомое число может быть дробным. Для целых чисел вам надо посмотреть 2 значения - округленное дробное вниз и вверх. Можно их получить проводя все вычисления только в целых числах. А дальше надо выбрать одну из двух меньших разностей, при условии, что chess[i].number там не равен K.
    Ответ написан
  • Как исправить ошибку "Not enough RAM 'ucHeap'"?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Не специалист по микроконтроллерам... Но похоже там тупо нет столько памяти, сколько вы хотите выделить под кучу. И, если вашей программе столько надо, то вам нужен контроллер по-круче или более эффективный по памяти алгоритм.
    Ответ написан
    Комментировать
  • Как правильно написать template функцию для контейнеров?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    По-моему, так гораздо понятнее:
    template <class Container>
    void print(const Container& c, string sep=" ", string end="\n")
    {
      for (const auto& e : c)
         std::cout << e << sep;
      std::cout << end;
    }


    Если же очень хочется через ostream_iterator, то:
    template <class Container>
    void print(const Container& c, string sep=" ", string end="\n")
    {
    
      std::ostream_iterator<typename Container::value_type> 
          out_it(std::cout, sep.c_str());
      std::copy(c.begin(), c.end(), out_it);
      std::cout << end;
    }
    Ответ написан
  • Как перевести строку бинарного файла в UTF8?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Для начала поймите, в какой кодировке исходный файл. Он точно содержит текст?
    Ответ написан
  • Почему Stack подчеркивает красным?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Hiroshima, Что выдает компилятор при попытке скомпилировать, можете прочитать и скопировать?
    Ответ написан
    Комментировать
  • Как найти элемент с нужным порядком в кольце вычетов?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Найдите первообразный корень по модулю p. Возведите его в степень (p-1) / q. Это и будет искомое число с порядком q.

    Есть вот такой алгоритм поиска первообразного корня: проверяйте все числа подряд. Разложите p-1 на множители и возводите проверяемое число в степень (p-1)/k, где k - простой делитель p-1. Если везде получили не 1, то текущее число - первообразный корень.
    Ответ написан
    Комментировать