• Как сделать чтобы нейросеть поняла входные данные?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Вы сети скармливаете какие-то 2 картинки. У нее 2 input'а

    print(model.predict([image,image2]))

    Втавьте вот в этот код выше перед вызовом predict вывод размеров image и image2.

    Сдается мне, что вы одну картинку как-то на 2 куска порезали и так и скормили сети. Если это не ваш код, то он возможно ожидает на вход картинку 128x64.
    Ответ написан
  • У меня несколько ошибок "was not declared in this scope" в коде C++, что делать?

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

    И так по каждой ошибке от компилятора в вашем вопросе. Смотрите на какое имя он ругается и где эта функция/переменная определена.
    Ответ написан
    1 комментарий
  • Как правильно применить абстрактный класc здесь?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Пометьте все методы DVector(2) в Vector2.h override. Посмотрите на ошибки компилятора.
    Ответ написан
    4 комментария
  • Реализация обоюдного включения файлов проекта?

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

    В особо запущенных случаях придется какие-то функции или классы дробить.

    Ну и Include guard'ы используйте
    Ответ написан
    Комментировать
  • Как оптимизировать код?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Как обычно в вопросах про олимпиадные задачи, ответ тут - код не соптимизировать никак. Надо его переписать с нуля с более быстрым алгоритмом.

    Смотрите на ограничания - n и m до 100000. Обычно такой порядок чисел означает, что вам нужно решение за O(n+m) или что-то вроде O(n+m log (n+m)). У вас же решение "в лоб" за O(nm), что никак не ускорить принципиально. Даже переписыванием на си со всякими хитростями вы ускорите его в 10, ну в 100 раз. А вам надо ускорить его в 10000 раз.

    Могу дать подсказки:
    Во-первых, если и там и там есть положительные элементы, то взяв максимальные в двух массивах вы точно получите элемент больше всех a и b. То же, если и там и там есть отрицательные элементы - надо взять два минимальных.

    Остался случай - что если один массив целиком отрицателен, а второй - целиком положителен. Пусть a положителен, а b отрицателен. Что будет, если взять минимальные по модулю элементы и там и там? Посмотрите внимательно - вам дано, что ни одно из чисел не 0. Это поможет.
    Ответ написан
  • Почему не работает с char[]?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    В коде какой-то ошибки не вижу. Скорее всего вы уже пытаетесь эту структуру засунуть в EEPROM и из-за этого что-то не работает.

    Это же c++, судя по тегам? Сделайте тогда все поля структуры static const и не заводите ее экземпляр. Обращайтесь к константам так: MqttConfig::host. Константы обычно задают так, а не значениями по умолчанию полей структуры.

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

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    В родительском классе у вас DVector(2P), а в наследнике DVector(2).

    Несовподают типы, об этом вам компилятор и говорит.
    Ответ написан
  • Можете решать эту задачу?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Можно забить на добавление вершин. Поскольку в задаче нет команд "удалить вершину" и гаранитируется, что в каждый момент времени структура будет деревом, то можно просто сначала создать дерево из всех вершин, и потом в нем выполнить все LCA.

    Воспользуйтесь алгоритмом тарьяна: https://e-maxx.ru/algo/lca_linear_offline для получения ответов на все запросы LCA сразу.

    Сначала при вводе создайте дерево целиком и запомните все запросы Get в массив. Потом пройдитесь по массиву запросов и раскидайте их в списки на вершинах, как надо в алгоритме таръяна.

    Вам надо лишь чуть-чуть подкорректировать этот код, чтобы вместе с вершиной-запросом добавлять в списки к вершинам номер этого запроса. И тогда вместо вывода v+1, q[v][i]+1 вы сможете записать ответ в массив по нужному индексу.

    Ну или воспользуйтесь онлайн алгоритмом для поиска LCA через обход со временем входа/выхода и деревом отрезков на минимимум.
    Ответ написан
    Комментировать
  • Как исправить ошибку Memory limit?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Ошибка в функции check. Вам тогда надо проверять, что текущее расстояние до ii, jj меньше или равно расстояния до i,j +1. Чтобы вы возвращали 0, если нет смысла переписывать расстояние и добавлять вершину в очередь.

    Из-за этого у вас каждая вершина может быть в очереди кучу раз.

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

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

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    f(std::string("abc"))

    Каких-то специальных встроенных в язык средств созадавать const std::string нету.
    Ответ написан
    2 комментария
  • Как задать плотность вероятностей перехода λij системы из состояния Si в Sj?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Ну... Это какие-то числа, которые вам надо придумать и задать. Руководствуясь какими-то методами тыканья пальцем в небо, пытаясь обосновать их физически.

    Допустим, телефон, когда он сядет, где-то за пару часов в среднем втыкают в разетку. Значит плотность перехода из S4 в S2 должна быть такой, чтобы среднее время до совершения осбытия было где-то пару часов. Процесс, видимо пуассоновский, раз у вас такие формулы, значит время до перехода будет распределенно показательно, значит среднее время равно 1/лямбда. Остюда лямбда = 1/<среднее время перехода>, или 1/2.

    Заряжается телефон где-то за 3 часа - значит переход между разряжен->выключен происходят с интенсивностью 1/3.

    Остальные числа выдумайте сами. Можно на основании собственной статистики.
    Ответ написан
    2 комментария
  • Как можно ускорить алгоритм?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Вы правильно поняли, что вам надо найти минимальный делитель числа K.

    Проблема в том, что если число K простое - то вы будете проходиться до него. Есть трюк - достаточно проверять только числа до корня из K. Ведь если у числа есть какой-то минимальный собственный (меньше него самого) делитель, то он точно меньше корня (потому что делителей как минимум два, и если минимальный из них больше корня, то их произведение - больше самого числа).

    Если вы не нашли делителя до корня, то число простое и в качестве делитеял можно брать все K и тогда ответ будет K-1.
    Ответ написан
    2 комментария
  • На сколько критичен сдвиг в массиве для алгоритмов?

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

    Но самое быстрое решение вашей задачи будет положить один массив в хеш таблицу, и при проходе по второму проверять, есть ли текущий элемент в таблице. Для борьбы с повторяющимеся элементами вв таблице по ключу храните счётчик одинаковых элементов и уменьшайте его при нахождении совпадения.
    Ответ написан
    4 комментария
  • Почему возникает ошибка доступа к элементу в классе?

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

    После выхода из функции этот указатель никуда дальше не попадает. И в showMatrix передается незаполненый указатель.
    Ответ написан
    3 комментария
  • Массовое сравнение сток, поиск пересечений, каким инструментом воспользоваться?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Просто воспользуйтесь алгоритмом ахо-корасика. У вас очень мало данных. Обработка их всех займет не более 100 мс на среднем компьютере в один поток.

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

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Ошибка в недрах стандартной библиотеки. Вы в вашей программе что-то не так делаете и она падает. Это частая проблема в C/C++, можно допустить такие ошибки, что программа упадет.

    Вы уже открыли вашу программу в дебаггере. В правом нижнем углу вы видите стек. Первые 3 функции - это в недрах библиотеки. Вам тут ничего не понятно, поднимайтесь вверх. Ткните в четвертую строчку - там где Main().

    Увидите, что ошибка происходит на строчке:
    cout << morze.find( text[i] )->second <<" ";

    Проблема возникает при попытке обратиться к second у возвращенного значения. Но почему? Читайте ошибку: "cannot dereference end map/set iterator".

    Т.е. find возвращает end() итератор. Действительно, посмотрите в документацию - map вернет end() если искомого ключа в нем нет.

    Иправить ошибку просто - исправьте ваш код. Сначала присвойте переменной возвращенный из find итератор, и потом проверяйте, а не end() ли он. И только в противном случае выводите.

    Я подозреваю, что символом оказался пробел. Пробела в вашем мапе morze нет, вот все и падает.
    Ответ написан
    1 комментарий
  • Какой алгоритм использовать для подбора ингредиентов по составу?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Как выяснили в комментариях, метрика будет sum_i w[i]^2 (actual[i]/ needed[i] - 1) ^ 2.

    пусть x[i] - соклько i-ого продукта
    Пусть a[i][j] - сколько в еденице i-ого продукта j-ого ингредиента. Тогда всего j-ого ингредиента будет sum_i a[i][j] x[i].

    Тогда получаем следующую оптимизационную задачу:

    Sum_j (sum_i A'[i][j] x[i] - C[i]) ^ 2 -> min
    sum_i x_i = 1
    x_i >= 0

    Сумма всего приравнивается к 1, потому что иначе надо считать пропорции и получится вообще ужас-ужас.

    A'[i][j], C[i] - какие-то числа, которые элементарно получаются из a[i][j], w[i] и needed[i].
    A'[i][j] = a[i][j]*w[j]/needed[j]
    C[j] = w[j] / needed[j];

    Это вообще-то задача квадратичного программирования, и есть всякие солверы для нее, но тут специфичный случай - можно получше что-то придумать.

    Можно применить метод лагранжа, а точнее метод Каруша — Куна — Таккера

    Сначала выразите x_1 = 1 -sum_j>1 x_j, подставьте во все уравнения и получите:
    Sum_j (sum_i A''[i][j] x[i] - C'[i]) ^ 2 -> min
    sum_i x_i -1 <= 0
    x_i >= 0

    Это уже похоже на то, что есть в википедии. Тут одно условие, поэтому будет один множитель лямбда. Надо составить функцию лагранжа, взять все ее производные по x_i и приравнять к 0. Полутчится система линейных уравнений.

    Для условия жесткости придется рассмотреть 2 случая - лямбда - 0 или тогда sum_i x_i - 1 = 0

    Прорешать оба случая (СЛАУ) и взять те, где все получается положительным.

    Это что-то близкое к методу наименьших квадратов, но тут вводятся дополнительные переменные, чтобы боротся с ограничениями неотрицательности и общей суммы.
    Ответ написан
  • Как сравнить unsigned long long и char* в C++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Потому что вы передаете во второй to_string первый символ (его код). Если вы передадите в качестве числа 61, а в качестве строки "A..." то будет true.

    Если вам надо сравнить число и строку, как набор цифр, то вы или только число переводите в to_string или только строку переводите в to_number.
    Ответ написан
    Комментировать
  • Как обращаться к элементам массива через указатель?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Раз вы передаете ссылку, то tmp_word и s являются тупо массивами, т.е. указателями на char. Поэтому вам не надо одновременно их разыменовывать и обращатся по индексу. Или пишите *(tmp_word+tmp) или tmp_word[tmp]

    А вообще, можно их и не передавать как ссылки а передвать сами массивы, как указатель на char.
    void DeleteWords(char *s, char *tmp_word, int size_word)


    Так будет понятнее и проще. А еще лучше, передавайте std::string или std::vector. По ссылке, чтобы избежать копирования. По const ссылке, если не хотите, чтобы их внутри функции меняли.
    Ответ написан
    1 комментарий