ashot_powershot, Ну так проверьте, что у вас сигнатура функции func соответствует тому, что принимает analiz. В одном месте у вас два инта, в дргом - массив.
Вадим Мамонов, Я думаю вы не все рассказали. Вы там точки как-то сортируете перед формулой гаусса? Может, выпуклую оболочку строите? Тогда умножение на 10^6 может помочь в точности сортировки (из-за плохого алгоритма сортировки). Поэтому знак ответа и меняется. Опять же, проблема не в формуле Гаусса и вообще искать близкие точки тут не надо.
Вадим Мамонов, Ну, во-первых, вам же не важно, совпадают ли первые числа в десятичной или двоичной записи. Вам важно, что числа очень близки. Тут можно просто проверять, что относительная разность (|a-b|/b) достаточно мала. Ну, на крайний случай, можно творить битовую магию с мантиссой и экспонентой. Тогда вы получите количество одинаковых двоичных цифр.
Во-вторых, сама ваша идея не правильная. Может получиться отрицательная площадь, если точки заданы не против часовой стрелки, а по. Тогда можно просто взять модуль площади в самом конце. От того, что точки очень близкие у вас отрицательных числ возникать не должно. Кроме того, в процессе вычисления площади по формуле Гаусса часть слагаемых может быть отрицательными - это нормально.
Soft_touch_plastic, Это не перебор. Это поиск кратчайшего пути в графе. Если слов всего 100 000, то можно сразу весь граф построить и гнать там хоть A*, хоть дейкстру.
Soft_touch_plastic, перебираете все варианты изменений, проверяете, что слово есть в словаре.
Если запустите какой-нибудь A*, то не надо даже граф сначала весь получать, там по ходу алгоритма просто надо обходить всех соседей вершинры - в этот момент генерируете новые слова.
voproser45654, В wingdi вы можете рисовать прямо в пиксели вашего окна. В directx работать с буфером в видеопямяти напрямую, а полноэкранном режиме вообще с пикселями на экране. Не знаю, что вам еще нужно.
profesor08, Ваше решение не верно для квадрата 1x1. Найденные 2 самые далекие точки - будут диагональю длины sqrt(2). Перпендикуляр - вторая диагональ. В итоге площадь у вас будет 2. Когда как можно пустить рамку вдоль самого квадрата, касаясть его везде - площадь будет 1.
Если ещё раз повернуть на угол А, то легко можно показать, что w2 < w1, h2 >
Вот это непонятно.
Но я по-другому доказал.
Обозначте острый угол между синей прямой и вертикальной стороной x. Площадь рамки пропорциональна sin(x)cos(c-x), где c - острый угол между синими прямыми.
Ширина рамки пропорциональна sin(x) - если провести горизонтальную высоту из левой вершины, то в прямоугольном треугольнике против угла x лежит ширина рамки. Вот и синус. Теперь надо найти острый угол между второй синей прямой и горизонтальной стороной рамки. Ясно, что этот угол будет в форме a-x. потому что поворот рамки увеличивает один острый угол и уменьшает второй. Из правого верхнего четырехугольника можно составить уравнение 360=c+(180-x)+90+(180+x-a). Отсюда a=c+90. Т.е. высота рамки пропорциональна sin(c+90-x) = cos(c-x).
Итак, площадь равна константе (длины синих отрезков) умноженной на sin(x)cos(c-x). Возьмем производную. Можно упростить как косинус разности. В итоге производная: cos(c-2x). Она равна нулю при с-2x = -90. Берем -90, потому что -180 < с-2x < 90, ведь 0 < c, x < 90. Т.е. точка экстремума вполне себе есть. Но может ли она быть минимумом? Вторая производная - 2sin(c-2x). Но мы помним, что с-2x=-90, а значит вторая производная отрицательна, а значит эта единственная точка экстремума - максимум.
ambisinister One, Ну что поделать, алгоритм сложный. В принципе, если опустить объяснение, почему это работает, да пару абзацев советов по реализации, то можно раза в 2 сократить текст. Но мне же непонятен уровень собеседника, поэтому расписывал детально.
Alexandroppolus, Если можно доказать, что ответ точно проходит через сторону, то да, можно без троичного поиска - достаточно проверить только углы вдоль сторон оболочки (и повернутые на 90, 180, 270) градусов.
Я пока не нашел контр-примера, но и доказать это я не могу.
Про поиск сделующих точек касания при сдвиге за O(1) я написал.
Без описания, что делает io_service_.run_one(), можно только догадываться. Видимо этот метод что-то как-то считает и меняеи переменную ec когда закончит.
STI1KS, Что есть? Не понял ваш коммент.
Вот, уже интереснее. Есть какая-то функция, и надо найти, где она принимает определенное значение.
И, предположительно, это значение она принимает только в одной точке. Если функция непрерывна, то это, кстати. возможно только если искомое значение - минимум или максимум функции.
Ваша изначальная функция (а не ошибка) - она непрерывна? Как она считается? Давайте все, что про нее знаете, иначе никакого вменяемого ответа вы тут не получите.
STI1KS, Можно повертеть? Сечение вдоль одной плоскости сделать? Уровни цветами задать, хотя бы? Я по этой картинке так и не могу понять, там есть локальные минимумы или нет, выпуклая ли она?
Раз вы свойства назвать не можете, давайте тогда описание, как функция считается. Какой у нее физический смысл?
Без каких либо свойств функции - действительно быстрые методы работать не будут.