• Задачка по теории вероятностей?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    События A и B независимые. Поэтому искомая верятность = P(A)+P(B) - P(A и B) = P(A)+P(B)-P(A)*P(B)

    Осталось найти вероятность каждого события. С вероятностью 1/4 по первой теме попадется тот же вопрос, что и в первой попытке. Во второй и третьей теме - вероятность 1/5. Вот у вас 3 монетки несимметричные подкинуты. Вам осталось найти вероятность, что для A - ровно одна монетка будет решкой, а для B - что все монеты выпали орлом. Так понятнее?
    Ответ написан
  • Дубликация значений в массиве. В чем ошибка?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Вы модифицируете исходный список, но не делаетe поправку на это.

    Сначала вы берете первый символ и добавляете его на второе место.
    Потом вы берете второй символ, но это не "b", как вы хотели бы, а "a", добавленное на предыдущем шаге. И так далее.

    Вам надо или собирать новый список, или помнить, что вы уже какие-то символы вставили. После i вставок первый недублируемый символ будет на позиции 2*i и вставлять его копию надо на следующую (2i+1) позицию.

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

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Вам надо арктангенс брать от отношения, а не тангенс (y2-y1) / (x2-x1).
    Ответ написан
  • Как вычислить ценовой рейтинг товара?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Это называется интерполяция. Вы знаете, что f(a) = 10, f(b)=5. Вам надо найти f(c), при чем f должна попадать под здравый смысл (монтонная, непрерывная функция).

    например, можно взять линейную инерполяцию, тогда f(x) = 10-(x-a)/(b-a)*5.
    Ответ написан
    1 комментарий
  • Как оптимизировать программу и код в принципе?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Ваша реализация неправильная. Введите тест
    4
    0 1 2 0
    1 0 0 2
    2 0 0 1
    0 2 1 0


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

    Потом, можно не искать минимальное ребро из оставшихся в цикле, а изначально отсортировать все ребра.

    Посмотрите псевдокод в википедии. Или вот есть реализация.
    Ответ написан
  • Правильная реализация уровней?

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

    Могу предположить, что в описанном вами случае надо 2^level * 10 опыта до следующего уровня.
    Ответ написан
    1 комментарий
  • Где ошибка в решении?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    У вас number в int не помещается. А вы цикл гоните от 2 до number. У вас условие i < number в цикле будет всегда выполнятся - потому что ну не может int i быть больше number.

    edit: И вообще логика проверки на простоту у вас сломана. del = i выполнится для любого j, такого что i на него не делится. Т.е. если i=6, то при j=5 вы dеl перезапишите. Вам надо в цикле устанавливать bool flag. И, после цикла на него смотреть.
    Ответ написан
    9 комментариев
  • Почему максимальный размер объекта std::string равен 4611686018427387897?

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

    Это 2^62-7. Почему 2^62? Может, в силу каких-то причин в вашей системе нельзя адресовать больше 62 бит. Может, система 2 бита для чего-то использует. Почему -7? Надо еще где-то хранить длину, надо оставить место для нулевого символа в конце и надо оставить нетронутым индекс std::string::npos - это значение используется для обозначения "несуществующего индекса". Конкретное значение зависит от того, что там программисты стандартной библиотеки сделали.

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

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Запустите и посмотрите: https://www.onlinegdb.com/online_c++_compiler. Попробуйте поменять по одному символу и смотреть, что происходит с выводом. Так вы поймете, что именно выводится, а потом чуть чуть знания C и вы поймете, почему так происходит.
    Ответ написан
    4 комментария
  • Компилятор сайта не понимает кодировку?

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

    Откройте исходник в блокноте - сохранить как - и выбирайте разную кодировку под именем файла. Если появились кракозябры, измените их на русские да/нет и сохраните файл. Повторите операцию для разных кодировок, пока не сайт не примет.
    Ответ написан
    Комментировать
  • Двоичное дерево - зачем оно нужно и как оно получается?

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

    Все внутри реализовано на указателях, массивах и структурах (тупо группа различных переменных, объедененных в один тип).

    Словарь в питоне, он же ассоциативный массив, действительно, реализован на основе хеш таблицы. Реализован внутри интерпретатора Питон. Это другая структура данных, сделанная на основе массивов и списков (которые реализованы на указателях).

    Но ассоциативный массив можно реализовывать и двоичными деревьями поиска. Например структура set в языке C++ - реализована деревом. Такой ассоциативный массив работает ассимптотически медленнее (логарифм операций вместо константы для поиска/вставки/удаления). Но обладает важным свойством - элементы там упорядочены. Можно найти минимальный ключ, обойти все ключи в порядке возрастания, подсчитать что-то на отрезке ключей. Плюс не нужно придумывать хороший хеш. В хеш-таблицах, если хеш плохой - можно получить O(n) операции. Или может не повести и будет куча коллизий даже для хорошего хеша. В двоичных деревьях поиска (большинстве) гарантирован худший случай за логарифм. В некоторых задачах лучше использовать именно эту структуру, чем хеш-таблицу.

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

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Только перебор. Или, если подойдёт достаточно хорошее решение - всякие эвристики с жадностями.
    Ответ написан
  • Почему программа может использовать больше динамической памяти, чем выделил `malloc()`?

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

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

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Простой файл A.h, сложный B.h.

    B.h включает A.h. Какой-то С.cpp включает и A.h и B.h в любом порядке. Фишка в использовании header-гуардов. Это вот эта штука:
    #ifndef blablabla
    #define blablabla
    
    // определения
    
    #endif // конец файла


    Каждый файл имеет свое уникальное bla-bla-bla (обычно используют имя файла с путем). В таком виде можно без проблем включать любой файл кучу раз и, пока у вас нет циклических зависимостей, сколько угодно сложный проект собирается - надо только помнить всегда включать все, что вы используете.
    Ответ написан
  • Не работает алгоритм std find для строки?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Вы вызываете std::find, который призван искать элемент в коллекции. А пытаетесь искать там строку. Это все почти компилируется, потому что строка - это коллекция символов, по ней можно было бы искать один символ. Но вы передаете туда указатель (ваша строковая константа). Компилятор не может преобразовать его в символ и на это ругается.

    Для того, что вам надо - есть std::string::find. Т.е. вам надо вызвать str.find(" ").

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

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

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Я так понял, проблема именно с глобальными переменными?

    В хедере объявляете переменную как extern, в одном c файле определяете ее с инициализацией без extern - тогда все работает.
    Ответ написан
    Комментировать
  • Это правильная реализация бинарного поиска?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Работает медленно, потому что вы обрезаете входной массив каждый раз. Для этого приходится обходить и копировать всю нужную часть. Поэтому суммарное время работы будет O(n).

    Чтобы работало быстро вам надо не менять lst, а помнить индексы границ текущего куска.

    Ещё, вам надо останавливаться, когда рассматриваемый кусок станет пустым, чтобы решение не вылетало, если искомого числа в списке нет.

    И последнее, в питоне есть операция целочисленного деления - //. Используйте ее вместо приведения к int после деления.
    Ответ написан
    2 комментария
  • Как обрезать двумерный массив в форме прямоугольника?

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

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Во-первых, можно отлично читать из файла сразу число. Вы как с консоли числа вводите? Вот точно также, только из файла. Вы как строку-то читаете? Вот передавайте там не строку, а int условный. Ну, еще, если scanf-ом читаете, то надо туда %d вместо %s передавать. А так есть еще функции преобразования числа в строку. Читайте справки по atoi, sscanf, stringstream.
    Ответ написан
    3 комментария