2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Это квадрат? Программная проверка
Сообщение07.10.2014, 10:40 
Вчера была олимпиада по программированию. Мое решение упало
на 40м тесте и все из-за того что я написал неправильную функцию
которая должна была определять, лежат ли четыре точки плоскости
на вершинах квадрата (по точке в каждой вершине).

В моей программе функция имеет такой прототип:
Код:
bool is_on_square(ii * xy)

где ii - это пара целых чисел. xy - вектор длины 4.

Как решить данную задачу? Я делал так, брал любую точку и вычислял расстояние
от нее до трех остальных, т. е. получил три числа. Если два из них были равны,
а квадрат третьей был равна сумме квадратов двух, то выводил да иначе нет, но
как я потом увидел это решение не всегда верно работает.

Как правильно решить данную задачу?

 
 
 
 Re: Это квадрат?
Сообщение07.10.2014, 10:54 
Аватара пользователя
Три точки расположены на одной прямой, две на равных расстояниях от средней. Четвёртая - где-то на плоскости, на расстоянии в $\sqrt2$ раз дальше от средней. Эта конфигурация пройдёт под Ваш тест.
Ещё скажите, что Вы там на самом деле извлекали корни (ну, чтобы расстояние).

-- менее минуты назад --

Я бы нашёл центр, вычел его из всех, а потом оперировал со скалярными произведениями (часть из них должна быть равна друг другу, часть - минус тому же, а часть - нулю.)

 
 
 
 Re: Это квадрат?
Сообщение07.10.2014, 11:14 
для квадрата можно обойтись изменением координат точек.

 
 
 
 Re: Это квадрат?
Сообщение07.10.2014, 11:22 
ИСН в сообщении #916062 писал(а):
Три точки расположены на одной прямой, две на равных расстояниях от средней. Четвёртая - где-то на плоскости, на расстоянии в $\sqrt2$ раз дальше от средней. Эта конфигурация пройдёт под Ваш тест.
Ещё скажите, что Вы там на самом деле извлекали корни (ну, чтобы расстояние).

Да, вы нашли контр-тест, поздравляю :|

 
 
 
 Re: Это квадрат?
Сообщение07.10.2014, 11:23 
Аватара пользователя
upgrade в сообщении #916064 писал(а):
для квадрата можно обойтись изменением координат точек.

Не совсем понял, что Вы имеете в виду, но можно и без произведений: тупо сравнить векторы, что они соответствуют поворотам одного из них на $90^\circ$ и далее.

 
 
 
 Re: Это квадрат?
Сообщение07.10.2014, 11:25 
да без сравнений и вычислений расстояний - помещаем какую-то очку в $(0;0)$ смотрим что с другими...

-- 07.10.2014, 11:26 --

одна пара должна выглядеть например $(10;2), (-2;10)$ ..

 
 
 
 Re: Это квадрат?
Сообщение07.10.2014, 11:29 
Аватара пользователя
upgrade в сообщении #916069 писал(а):
да без сравнений

дак вот это же и есть сравнение:
upgrade в сообщении #916069 писал(а):
должна выглядеть например $(10;2), (-2;10)$

 
 
 
 Re: Это квадрат?
Сообщение07.10.2014, 11:31 
да, без сравнений не получится.

 
 
 
 Re: Это квадрат?
Сообщение07.10.2014, 11:35 
Аватара пользователя
Количество операций у нас различается маргинально, но в Вашем варианте легче запутаться, потому что больше частных случаев.

 
 
 
 Re: Это квадрат?
Сообщение07.10.2014, 11:46 
ИСН в сообщении #916062 писал(а):
Я бы нашёл центр, вычел его из всех, а потом оперировал со скалярными произведениями (часть из них должна быть равна друг другу, часть - минус тому же, а часть - нулю.)

Здесь под центром вы имеете ввиду точку координы которой являются средним значением координат остальных?

 
 
 
 Re: Это квадрат?
Сообщение07.10.2014, 11:48 
Аватара пользователя
Да.

 
 
 
 Re: Это квадрат?
Сообщение07.10.2014, 11:54 
ИСН в сообщении #916074 писал(а):
Количество операций у нас различается маргинально

с поиском центра операций меньше, согласен

 
 
 
 Re: Это квадрат?
Сообщение07.10.2014, 12:04 
Давайте сначала найдем хоть какое-то решение и детально его сформулируем,
а потом можем решить вторую задач - поиск быстрого решения.

 
 
 
 Re: Это квадрат?
Сообщение07.10.2014, 12:05 
Можно ещё найти 6 квадратов попарных расстояний, которые должны относиться как 2:2:1:1:1:1.

 
 
 
 Re: Это квадрат?
Сообщение07.10.2014, 12:08 
Аватара пользователя
upgrade, я Вам начал было писать длинную простыню, что Вы не понимаете своё собственное решение, а она уже и не нужна. Ладно.

-- менее минуты назад --

frankenstein, Вам нашли решение и сформулировали его настолько детально, насколько позволяет совесть. Если ещё дополнить, то какая часть работы останется на Вашу долю?

 
 
 [ Сообщений: 18 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group