Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Помогоите решить олимпиадную задачу

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3

Открыть новую тему     Написать ответ в эту тему

max0z

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для плоскости можно попробовать и вот так :
1) ищем прямую расстояния от которой до центров планет минимальны.. ( метод наименьших квадратов для F(x)=ax+b;
2) из тех планет которые прямая не пересекла исключаем одно, расстояние от поверхности которой до этой прямой максимально (самую дальнюю планету исключаем)
3) если прямая проходит не через все оставшиеся поланеты - возвращаемся к шагу 1.
4) на полученной прямой размещаем ЗВЕЗДУ так чтобы все планеты были по одну сторону..ЗАЛП.
 
для 3d то-же самое..
алгоритм получается почти линейный , но сложно доказуемый ;-(
 

Всего записей: 21 | Зарегистр. 15-02-2005 | Отправлено: 20:29 24-02-2005
Function

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Звезды не могут стрелять в любой точке. Тут,наверное, выстрел может произойти из любой точки звезды.
 
Добавлено:
В любом случае.
Можно решать системы 2-х уравнений вида
 
|уравнение прямой  
|
|уравнение окружности
|

Всего записей: 112 | Зарегистр. 31-01-2005 | Отправлено: 21:41 24-02-2005
Sensej



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Звезды не могут стрелять в любой точке. Тут,наверное, выстрел может произойти из любой точки звезды.  

 
DeathStar - космический корабль из Звёздных Войн размером с нехилую планету и обладающий лазероподобным оружием разрывающим планету за 1 удар.
 

Всего записей: 44 | Зарегистр. 09-05-2004 | Отправлено: 22:48 24-02-2005
FuzzyLogic



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sleepwalker
В вашем алгоритме вы будете искать пересечения углов (эдаких треугольников) на вхождение друг в друга, образованные парами касательных между парами окружностей. Или я не правильно понял?
 

Цитата:
Звезды не могут стрелять в любой точке. Тут,наверное, выстрел может произойти из любой точки звезды.

 
Function
Вы о чём?  Краткость конечно сестра таланта, но мысли надо выражать так чтобы и другим было ясно, иначе не стоит их и писать.
 
И про пересечения тоже ... Sleepwalker не спрашивал как ишется пересечение окружности с прямой, ему надо пересекать "углы" или в случае 3D эдакие конусы, если я правильно понял его идею.
 
vhl
Каких отрезков? Вы не ответили по поводу контура, пересечение с каким контуром вы ищете... И если это контур который вмещает в себя все планеты, то тогда если касательные пересекутся до пересечения с контуром, то полученный отрезок - чепуха.
 

Цитата:
 алгоритм получается почти линейный , но сложно доказуемый

Угу, и создается ощущение что работать он тоже не будет. Хотя, пока не опровергнут ...

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 00:16 25-02-2005
ScipionST



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
  Насчёт недосказаного в условии задачи - все даные, что были - представлены в первичном условии, было бы конечно хорошо если бы было известно откуда должна стрелят звезда смерти, но несудьба.
   Насчёт погрешности ничего сказать не могу, т.к. в примере входных и результирующих даных писалися координаты планет аля (1.00;5.00), а радиус 2.0 и т.д., ну а ответ - собственно просто 2 или 3 ....
 
   Насчет ограничения по времени - до 3 секунд.
   

Всего записей: 420 | Зарегистр. 05-02-2005 | Отправлено: 01:13 25-02-2005
vhl



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
FuzzyLogic
Ну я тоже пришел к тому, что и не в контуре дело и даже не в области максимального числа пересечений областей, потому как можно придумать такой расклад, что данная точка не будет лежать на искомой прямой да и по поводу алгоритма max0z тоже самое можно сказать - расположи планеты в 2 линии и найденая вашим алгоритмом прямая будет лежать между ними.

Всего записей: 106 | Зарегистр. 28-12-2003 | Отправлено: 06:16 25-02-2005 | Исправлено: vhl, 06:22 25-02-2005
Felan

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Занятная задача...
 
Я думаю, так:
На плоскости набросаны планеты. Очевидно, что не важно, как они расположены, но стрелять надо из-за облости, которая содержит эти планеты, поскольку только так можно задеть максимальное число планет (на расположение звезды никаких ограничений нет).
 
Что бы определить это направление, нужно посчитать линейную регрессию, а радиусы планет тут не причем. Вернее они нужны, но только для того, что бы считать сколько планет попалось, и что бы вообще их было больше одной, а то если они будут точками, то мало куда попадешь, в любом случае.
 
Тут, правда может быть такой случай, что ни одна планета не попадет на регрессию, но тогда можно вторым шагом сделать аппроксимацию, с условием прохождения аппроксимирующей прямой через ближайшую к линии регрессии планету.
 
Вроде должно работать...

Всего записей: 58 | Зарегистр. 04-03-2003 | Отправлено: 16:02 25-02-2005
zeleniy



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А может надо считать плотность планет в определенном направлении или что-то в этом роде. Ведь по условию расчет должен быть быстрым.

Всего записей: 778 | Зарегистр. 07-12-2001 | Отправлено: 16:44 25-02-2005
max0z

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vhl

Цитата:
тоже самое можно сказать - расположи планеты в 2 линии и найденая вашим алгоритмом прямая будет лежать между ними

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

Всего записей: 21 | Зарегистр. 15-02-2005 | Отправлено: 17:31 25-02-2005
ScipionST



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
   Я лично конешно думал сделать через метод найменьших квадратов, тобиш нарисовать прямую с минимальным отклонением от центров планет, но есть одно НО!!!
 
   Были бы планеты квадратами(кубами) - задачу можно было бы довольно легко реализовать, но в случае кругов, максимально допустимое отклонение проведенной линий  варьируется и зависит от радису планет и угла между линией и осями координат.
   

Всего записей: 420 | Зарегистр. 05-02-2005 | Отправлено: 17:33 25-02-2005
max0z

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ScipionST

Цитата:
Были бы планеты квадратами(кубами) - задачу можно было бы довольно легко реализовать, но в случае кругов, максимально допустимое отклонение проведенной линий  варьируется и зависит от радису планет и угла между линией и осями координат.
 

Сам то понял что сказал ?  
Как раз с кругами то и проще круг одинаково распёрт в разные стороны - просто отожравшаяся точка Ту же задачу но с квадратами/кубами аналитичеким методом будет гоораздо сложнее - только у сферы/шара проекция одинакова с любой стороны

Всего записей: 21 | Зарегистр. 15-02-2005 | Отправлено: 19:39 25-02-2005
FuzzyLogic



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
max0z
А я вам снова картинку нарисовал
   
Пара пояснений к картинке... слева имеем кластер планет (скажем 1000 штук) с оооочень маленькими радиусами, такие, что какую бы прямую мы не провели она проходит максимум через две планеты. Кластер этот представляет эдакое облако вытянутое по вертикали. Справа имеем N планет, через которые мы запросто можем провести прямую.
 
Анализ с методом мин. квадратов расстояний до центра планет, махом выкидывает все красненькие планеты (главное чтобы кол-во планет слева значительно превосходило кол-во планет справа) ну и на этом в общем-то всё заканчивается - джедаи победили звезду

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 10:51 26-02-2005 | Исправлено: FuzzyLogic, 19:53 26-02-2005
RedMac



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как чел, имеющие прямое отношение к олимпиадному программирование могу предложить такое решение (вернее такое решение я со своими учениками придумали на кружке):
 
0 Будем пользоваться методом динамического программирования
 
1 Для каждой пары А и В выясняем существует ли такая прямая, что некая С лежит вместе с ними. Для этого нужны элементарные знания геометрии (стереометрии)
 
2 В результатет 1) получили соответствие пара  <-> множество
3 Далее формулируем след утверждение, что точка Х лежит на прямой А_1А_2А_3 ... А_n т. и т.т. если она находится в соотношении 2) со всеми возможными парами из А_1А_2А_3 ... А_n
 
4 Нашли самую длинную последовательность планет
 
Осталось найти эту самую прямую  - задача аналитической геометрии на прикладной математике за 2 курс
 
Критика поощряется )
 
 

Всего записей: 418 | Зарегистр. 06-08-2003 | Отправлено: 04:04 27-02-2005
vndovr

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Критика:
 
1. Для каждой пары чего чего?
2. Соответствие - пара чего <-> множество опять же чего (точек, прямых, плоскостей, шаров?, ....)
3. Т.к. 1 и 2 непонятны, то, честно говоря, непонятно и что утверждается.
4. после более подробного изложения 1 2 3

Всего записей: 359 | Зарегистр. 05-02-2004 | Отправлено: 10:48 27-02-2005 | Исправлено: vndovr, 10:49 27-02-2005
max0z

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В любом случае есть решение простого перебора..
перебираем все варианты и смотрим нельзя ли провести прямую через выбранные планеты..
запоминаем вариант в котором луч проходит через максимальное число планет.
несмотря на то что кол-во варантов велико, есть возможность оптимизации..
А посмотреть можно ли провести прямую через N выбранных планет - достаточно простой алгоритм..
Вопрос : подходит ли метод простого перебора вариантов ?

Всего записей: 21 | Зарегистр. 15-02-2005 | Отправлено: 21:00 27-02-2005
vndovr

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
max0z
Конечно есть.
Сводится она, в общем, к следующему (напишу для плоскости).
1. Для множества S окружностей (s1, s2, ..., sN), заданных уравнениями:
(x1-a1)^2 + (y1-b1)^2 = с1^2
....
(xN-aN)^2 + (yN-bN)^2 = cN^2
определить, существует ли прямая ax + by + z = 0, которая пересекает каждую сферу из заданного множества S. + И найти один из вариантов a, b и z (само собой их может быть много).
Если данная задача решается, то исходная решается перебором. Для оптимизации можно вместо перебора строить дерево решений - задачу можно свести к следующей. Есть множество S1 окружностей для которых такая прямая существует. Определить существует ли она для множества S2 полученного из S1 добавлением еще одной окружности.
 
На предыдущей странице FuzzyLogic описал как это сделать. Т.е. основная идея (FuzzyLogic - сорри, я немного с другой стороны подойду) - записываем уравнение прямой в виде y = ax + b. Собственно нас интересует коэффициент a - он определяет угол наклона. Для двух окружностей получим интервал - [a1, a2] - он описывает угол наклона всех прямых проходящих одновременно через обе окружности. Если такая прямая существует для множества окружностей S, то пересечение множества соответствующих интервалов углов наклона прямых непустое. При добавлении новой окружности - просто осуществляем эту проверку.  
 
Дальше можно  перейти от плоскости к 3-х мерному пространству, - будет достаточно решать данную задачу для проекций шаров на плоскости X Y Z (одновременно). Т.е. при добавлении новой сферы - рассчитываем ее проекции на каждую из плоскостей и в каждой из них проверяем описанное выше условие. Если во всех 3 ответ утвердителен, то такая прямая существует.  
 
Это будет работать - вычисления сами по себе несложные, но их достаточно много. Интересует, есть ли более эффективный алгоритм решения данной задачи.
 
Надеюсь что нигде не ошибся

Всего записей: 359 | Зарегистр. 05-02-2004 | Отправлено: 04:55 28-02-2005 | Исправлено: vndovr, 04:56 28-02-2005
Duke Shadow



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А как вам такое, правда, не знаю толком, как развить до победного конца.
 
Немного проанализировав ситуацию можно смело полагать, что Звезда Смерти стреляет непосредственно из планеты.
Сортируем планеты по возрастанию диаметров.
Встаём в самую маленькую и палим в крайние точки самой большой. Проверяем сектор обстрела. Нет, блин, сильно много проверок получается... Ещё обратный сектор обстрела проверить, в каждом секторе найти оптимальную прямую, потом последовательно прострелять во все планеты по мере уменьшения их диаметров и повторить это всё для следующей из массива... Нет, однозначно много - в 3 секунды вряд ли уложишься, если планет достаточно много.

----------
Тот, кто умеет - делает, кто не умеет - учит(с)Б. Шоу
Войны никого не могут сделать великим(с)магистр Йода
Аватар(c)MindDiver

Всего записей: 3921 | Зарегистр. 15-02-2003 | Отправлено: 14:44 28-02-2005
max0z

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Промежуточный алгоритм ( сокращение полного перебора с N ! до N*(N-1)*(N-2) )
Перебор можно значительно сократить основываясь на факте, что
луч сначала попадает в одну планету, потом задевает еще несколько и наконец выходит через последню.(как минимум в две планеты мы попадём точно)  
 
Перебираем пары планет ( их всего N*(N-1) если N общее число планет) ,
для каждой пары строим две внешние касательные. Из осташихся планет (N-2) те которые хоть одним боком задевают эти касательные или целиком лежат между ними - вероятные кандидаты, быть третьей спаленной планетой.  
В итоге имеем планету через которую луч входит, планету через которую луч выходит и множество планет которые луч может задеть.  
 
Дело за малым

Всего записей: 21 | Зарегистр. 15-02-2005 | Отправлено: 19:41 28-02-2005
YourDudeness

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
to RedMac
 Согласен. ИМХО, если учитывать ограничения по тайту и памяти, то динамика наиболее применима. У меня идея решения очеь похожа на твою.
 
автору:
 Если в динамическом программировании силен - попробуй этот метод.

Всего записей: 1 | Зарегистр. 24-10-2005 | Отправлено: 18:18 25-10-2005
DIMICH



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребят плиз помогите решить задачу по информатике! Вы конечно извините но я в этом ничерта не понимаю, а здавать нужно! Извините что беспокою вас такими тупыми запросами, но я по професии дизайнер и в этом нихера не шарю
 
Задача №1  
Решить систему ленейных уровнений
  |   A1X + B1Y + C1Z + D1 = 0
 <   A2X + B2Y + C2Z + D2 = 0  
  |   A3X + B3Y + C3Z + D3 = 0  
 
 
   A1 = -1         A2 = 0        A3 = -0.5
   B1 = 0          B2 = 1.5     B3 = 1
   C1 = -1.79    C2 = 8.7     C3 = 3.5
   D1 = 4.2       D2 = -2.25  D3 = 0.6
 
 
Задача №2
Решить систему ленейных уровнений
   K1X1 + L1X2 + M1X3 + N1X4 + S1 = 0
   K2X2 + L2X2 + M2X3 + N2X4 + S2 = 0  
   K3X3 + L3X3 + M3X3 + N3X4 + S3 = 0  
   K4X4 + L4X4 + M4X4 + N4X4 + S4 = 0  
 
 
   K1 = 0        K2 = 1        K3 = 2        K4 = 2
   C1 = 8        C2 = 12      C3 = -1      C4 = 7
   M1 = 4.2     M2 = 0        M3 = 2.5     M4 = -3
   N1 = -4.2    N2 = 0.5      N3 = 0       N4 = 0
   S1 = 0        S2 = -3.6     S3 = -5.5   S4 = 0
 
 
Задача №2
Решить систему ленейных уровнений
   E1X + F1Y + G1Z + H1U + A1 = 0
   E2X + F2Y + G2Z + H2U + A2 = 0  
   E3X + F3Y + G3Z + H3U + A3 = 0  
   E4X + F4Y + G4Z + H4U + A4 = 0  
 
 
   L1 = 4.5         L2 = 0          L3 = 6.5       L4 = -4.5
   F1 = -4.7        F2 = -9.2      F3 = 8.1       F4 = 7.3
   G1 = 0           G2 = -4.7     G3 = 0         G4 = 1.5
   H1 = 2           H2 = -4         H3 = 0         H4 = 0
   A1 = 0.9        A2 = -1.4      A3 = -6.5     A4 = 3
 
Зарание благодорю за помощь! Если чтото надо по дизайну обращайтесь
 
 


----------
Ыыыычь

Всего записей: 1363 | Зарегистр. 06-03-2004 | Отправлено: 19:27 02-12-2007 | Исправлено: DIMICH, 19:28 02-12-2007
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Помогоите решить олимпиадную задачу


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru