alekseiami, Ну данное a на самом деле неважно. Ибо треугольник с углом и соотношением двух сторон можно как угодно масштабировать, что бы a нашлось заданное.
Или можно из квадратного уравнения решать C относительно A. Потом B = kC. А потом остается проверить, что неравенства выполняется. По идее A тоже должно сократиться.
AnnyB_009, Да. Первый вариант выберется с вероятностью 1/8. Второй - с вероятность 7/8*3/7 = 3/8, как надо. Третий с вероятностью 7/8*6/7*3/6 = 3/8. Именно поэтому последующие разы вы генерируете не от 0 до 7, а от 0 до сколько там осталось вариантов.
AnnyB_009, О госпади. Ну тогда можно так - сначала если случайное число от 0 до 7 равно нулю, то первый вариант. Потом, если случайное число от 0 до 6 равно 0,1,2 - то второй варинат, потом случайное число от 0 до 4 должно попасть в 0,1 или 2, и в конце всегда остается четвертый вариант.
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) я написал.
Или можно из квадратного уравнения решать C относительно A. Потом B = kC. А потом остается проверить, что неравенства выполняется. По идее A тоже должно сократиться.