ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ ПОВЫШЕННОЙ СЛОЖНОСТИ

  • docx
  • 27.11.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л2-003014.docx

ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ ПОВЫШЕННОЙ СЛОЖНОСТИ

Для решения геометрических задач повышенной сложности необ- ходимо:

 

1.            знать, как представляются на плоскости такие геометрические объекты, как точка, прямая, отрезок и окружность;

2.            уметь находить уравнение прямой, соединяющей две заданные точки;

3.            уметь определять координаты точки пересечения двух пря- мых;

4.            знать, как провести перпендикуляр к прямой или определить, являются ли прямые параллельными;

5.            уметь находить скалярное и векторное произведение;

6.            находить площадь многоугольника;

7.            уметь работать с фигурами на плоскости.

 

Напомним основные моменты, связанные с этими понятиями.

Каждую точку плоскости можно считать вектором с началом в точке (0,0). Обозначим через a=(x, y) вектор с координатами (x, y). Дли-


на вектора (его модуль) вычисляется по формуле


a =                 .


Скалярное произведение двух векторов – это число, равное про- изведению модулей этих векторов на косинус угла между ними, (a,b)=|a|

   |b| ∙ cos φ. Если вектор a имеет координаты (x1, y1), а вектор b коорди- наты (x2, y2), то скалярное произведение вычисляется по формуле (a,b)= x1 x2 + y1 y2.


 

Рис. 16.1. Иллюстрация к скалярному произведению векторов

Заметим, что если угол φ острый, то скалярное произведение (a,b)>0, если угол φ тупой, то (a,b)<0. Если два вектора перпендикуляр- ны, то их скалярное произведение равно нулю.

Векторным произведением двух векторов a и b называется век- тор [a × b], такой, что

·               длина его равна |[a × b]|=|a| |b| sin φ;

·               вектор [a × b] перпендикулярен векторам a и b;

·               вектор [a × b] направлен так, что из его конца кратчайший по- ворот от a к b виден происходящим против часовой стрелки.

Длина векторного произведения равна площади параллелограмма, построенного на векторах a и b.

Через координаты векторов a и b векторное произведение выра- жается следующим образом:

 

i

j

k

x1

y1

z1

[a × b]= y1 x2) k,

x2

y2

z2 = (y1 z2 z1 y2) i + (x1 z2 z1 x2) j + (x1 y2

где i, j, k – единичные вектора осей Ox, Oy, Oz соответственно. При решении задач на плоскости координаты z1 и z2 равны нулю.

В этом случае [a × b]=(x1 y2x2 y1)∙ k.

Если вектор a образует с осью Ох угол α, а вектор b – угол β, то для скалярного произведения справедлива формула [a × b]=(|a| ∙ |b| ∙ sin(β-α))∙ k. Это означает, что для ненулевых векторов векторное произ- ведение равно нулю тогда и только тогда, когда векторы параллельны. Если поворот от вектора а к вектору b по наименьшему углу выполня- ется против часовой стрелки, то [a × b]>0, если по часовой стрелке, то [a × b]<0.


 

 

 

Рис. 16.2. Иллюстрация к векторному произведению

Рассмотрим задачи, при решении которых используются скаляр- ное и векторное произведения.

 

Задача 1. «Штраф за левые повороты» [1]. В городе Х водите- лям запрещено выполнять левые повороты. За каждый такой поворот водитель должен уплатить штраф в размере М рублей. Для слежки за водителями в городе установлена компьютерная система, фиксирую- щая координаты автомобиля в начале движения, в конце движения и во время поворота.

Исходные данные: N количество зафиксированных координат автомобиля, (xi, yi) координаты автомобиля в процессе движения, i=1,2, …, N, где (x1, y1) – точка начала движения, (xN, yN) – последняя точка маршрута автомобиля.

Требуется по заданной последовательности координат движения вычислить сумму штрафа водителя.

(xi+1, yi+1)

 

(xi, yi)

 

(xi-1, yi-1)

 

Рис. 16.3. Иллюстрация к задаче «Штраф за левые повороты»

Траекторию движения автомобиля можно представить в виде ло- маной, состоящей из направленных отрезков из точек (xi, yi) в точки (xi+1, yi+1), i=1,2,…,N-1. Поворот считается левым, если направление те-


кущего отрезка пути ai+1 меняется относительно предыдущего отрезка ai

в левую сторону, т.е. против часовой стрелки.

Таким образом, решение задачи сводится к вычислению количе- ства пар участков пути ai и ai+1, для которых выполняется условие [ai × ai+1]>0. Координаты векторов ai и ai+1 вычисляются через координа- ты точек (xi, yi): ai=(xi xi-1, yi yi-1), ai+1=(xi+1 xi, yi+1 yi), следовательно,

[ai × ai+1]= (xi xi-1) (yi+1- yi) – (yi yi-1)(xi+1 xi), i=2, …, N-1.

 

Задача 2. «Здесь будет город-сад». Жители одного дома города Х решили высадить у себя во дворе несколько деревьев. Так как жильцы не смогли договориться, как должны быть расположены посадки, то каждый посадил дерево в том месте двора, где ему захотелось. После проведения посадок полученный сад решили обнести забором. Но пока доски не привезли, деревья обвязали одной длинной веревкой.

Исходная информация: N – количество деревьев в саду, (xi, yi) – координаты деревьев, i=1,2, …, N. Так как были высажены молодые са- женцы, то их толщиной можно пренебречь.

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

Эта и подобные ей задачи сводятся к определению для заданного множества точек на плоскости выпуклой оболочки, то есть выпуклого многоугольника с вершинами в некоторых точках из заданного множе- ства, охватывающего все его точки. В [2] приведено несколько вариан- тов решения такой задачи с учетом временных затрат на выполнение алгоритмов. Здесь мы рассмотрим способ, использующий свойства ска- лярного произведения векторов.

Будем строить выпуклую оболочку в порядке обхода участка по часовой стрелке. Найдем самую левую точку М0=(x0, y0), x0=min{xi}. Ес- ли таких точек несколько, то возьмем самую нижнюю из них. Эта точка наверняка принадлежит искомой выпуклой оболочке. Зададим первона- чальный вектор a0 с началом в точке (x0, y0), параллельный оси Oy.

Следующей точкой оболочки будет такая точка М1, чтобы вектор a1 с началом в точке М0 и концом в точке М1 образовывал с первона- чальным вектором a0 минимальный угол. Если таких точек несколько, то выбирается точка, расстояние до которой максимально.

Далее процесс продолжаем, то есть ищем точку М2 с минималь- ным углом между вектором a1 и вектором a2 с началом в точке М1 и концом в точке М2, затем точку М3 и т.д. Процесс прекращаем, когда


дойдем до первой выбранной точки или количество точек в оболочке станет равно N.

Для определения угла между векторами используется скалярное произведение. Причем сам угол можно не вычислять, так как мини- мальному углу соответствует максимальный косинус угла.

 

Задача 3. «Заяц» [3]. Недалеко от города Х находится зоосад. Здешний житель, заяц, хаотично прыгая, оставил след в виде замкну- той самопересекающейся ломаной, охватывающей территорию его владения. Найти площадь минимального по площади выпуклого много- угольника, описанного вокруг этой территории.

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

Исходные данные: N количество вершин выпуклого много- угольника, (xi, yi) координаты вершин, i=1,2, …, N.

Требуется определить площадь выпуклого N-угольника.

Площадь N-угольника может быть вычислена как сумма площадей треугольников, из которых N-угольник составлен. Для нахождения площади треугольника используем векторное произведение. Длина век- торного произведения векторов, как известно, равна удвоенной площа- ди треугольника, построенного на этих векторах. Пусть вершины тре- угольника расположены в точках A=(x1, y1), B=(x2, y2), C=(x3, y3). Совме- стим начало координат с первой точкой. Векторное произведение равно


 

x2

[AB × AC]= x3


i

-   x1

-   x1


j                 k

y- y1             0

y3 - y1             0 ,


следовательно, площадь треугольника равна SABC=1/2 ((x2 x1) (y3 – y2) – (y2 y1)(x3 x2)).

Значение величины SABC может быть как положительным, так и отрицательным числом, так как оно зависит от взаимной ориентации векторов AB и AC, поэтому говорят, что площадь ориентированная.

Для нахождения площади N-угольника последний требуется раз- бить на треугольники и найти сумму ориентированных площадей этих треугольников. Разбиение N-угольника на треугольники можно прове- сти так: зафиксировать одну из вершин N-угольника, например, первую A1=(x1, y1) и рассматривать все треугольники A1Ai Ai+1, i=2, 3,…, N-1.


А2

 

А3

 

А1

 

А5                                                                                                                                      А

 

Рис. 16.4. Иллюстрация к задаче «Заяц»

Заметим, что аналогичным способом можно находить площадь произвольного многоугольника.


Рис. 16.5. Нахождение площади произвольного многоугольника

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

 

Задача 4. «Тигр в загоне». Недалеко от города Х находится за- поведник, в котором обитают уссурийские тигры. Работники заповед- ника очень переживают, когда тигр покидает охраняемую зону. Про- грамма охраны уссурийских тигров предусматривает снабжение каж- дого тигра ошейником с радиомаяком. Сигнал от тигриного радиомая- ка поступает в центр охраны и позволяет определить местоположе- ния тигра. Территория заповедника представляет собой произвольный многоугольник.

Исходные данные: N – количество вершин многоугольника, зада- ющего заповедник, (xi, yi) – координаты его вершин, i=1,2, …, N. (X, Y) – координаты точки, в которой находится тигр.


Требуется определить, находится ли тигр на территории заповед- ника, или надо срочно снаряжать спасательную экспедицию.


Рис. 16.6. Иллюстрация к задаче «Тигр»

Очень часто при решении задач геометрического содержания тре- буется проверить, лежит ли заданная точка внутри или вне многоуголь- ника. Таким способом можно решить, например, задачу о Бармаглоте, проверяя каждую точку Бармаглота относительно одеяла- многоугольника. Есть много способов проверки принадлежности точки многоугольнику, однако мы приведем здесь один из них, основанный на использовании произведения векторов.

Идея метода заключается в том, чтобы определить сумму углов, под которыми стороны многоугольника видны из проверяемой точки. Если точка лежит внутри многоугольника, то суммарный угол равен 2π (точка Р на рисунке), если же точка лежит вне многоугольника, то сум- ма углов не равна 2π (точка Q).

Таким образом, для решения надо перебрать в цикле последова- тельно все вершины многоугольника и найти сумму углов между векто- рами PAi и PAi+1, i=1,2, …, N. Не забудьте добавить угол между векто- рами PAN и PA1. Для определения величины угла между векторами нам потребуется формула скалярного произведения.

Так как стороны многоугольника должны рассматриваться после- довательно, в порядке обхода вершин, то при нахождении суммарного угла следует учитывать взаимное расположение векторов. Угол, под ко- торым сторона видна из исследуемой точки, может быть как положи- тельным, так и отрицательным. Для определения знака угла воспользу- емся векторным произведением. Знак векторного произведения и опре- делит знак конкретного угла в общей сумме.

 

Задача 5. «Пересечение отрезков». Дано n отрезков. Реализовать программу, находящую все их пересечения между собой. Отобразить решение графически.


На плоскости заданы два отрезка a и b, a точками A1(A1 ,A1 ) и

x        y

A2(A2x,A2y), а b – точками B1(B1x,B1y) и B2(B2x,B2y). Найти и напечатать возможную точку их пересечения C(Cx,Cy). Рассмотрим первый отрезок

a. Уравнение прямой, на которой он лежит можно записать так: xa = A1x + ta (A2x – A1x)

ya = A1y + ta (A2y A1y)

Здесь, A1x,A1y,A2x,A2y константы, xa,ya точки принадлежащие отрезку, при ta изменяющемся от 0 до 1. Аналогично для отрезка b:

xxb = B1x + tb (B2x – B1 ) yb = B1y + tb (B2y – B1y)

Таким образом, приравнивая соответствующие координаты, полу- чаем задачу нахождения параметров ta,tb, при которых бы выполнялись равенства:

A1x + ta (A2x – A1x) = B1x + tb (B2x – B1x) A1y + ta (A2y A1y) = B1y + tb (B2y – B1y)

После разрешения системы относительно ta,tb получаем: ta (A1x – A2x) + tb (B2x – B1x) = A1x – B1x

ta (A1y – A2y) + tb (B2y – B1y) = A1y – B1y

А это есть система из двух линейных уравнений относительно ta,tb. Известно, что система:

a1 x + b1 y = c1 a2 x + b2 y = c2

имеет следующее решение:

x = dx/d y = dy/d,

где d – определитель матрицы, d = a1b2 – a2b1,

dx = c1b2 – c2b1, dy = a1c2 a2c1.

В нашей системе относительно ta,tb:

a1 = A1x – A2x b1 = B2x – B1x c1 = A1x B1x

a2 = A1y – A2y b2 = B2y – B1y c2 = A1y B1y

откуда легко находится d,dx,dy. Если d отличен от нуля, то система

имеет единственное решение. Правда, следует помнить, что искомые ta,tb параметрически задают отрезки только если они лежат в диапа-


зоне [0,1], в противном случае точка пересечения прямых, на которых лежат отрезки, находится вне этих самых отрезков.

Если d равен нулю, а хотя бы один из dx,dy отличен от нуля, то от- резки лежат на параллельных прямых, или как говорят математики, они коллинеарны. Если же все три d,dx,dy равны нулю, то это значит, что от- резки лежат на одной и той же прямой, где опять возможны три случая

– либо отрезки не перекрываются, либо перекрываются в одной точке, либо перекрываются в бесконечном множестве точек.

 

Решение ряда задач повышенной сложности опирается на методы рассмотренные в комбинаторике, а именно на возможность генерации: сочетаний, перестановок, размещений и перечислений элементов.

Одним из важных элементов комбинаторики являются переста- новки. Перестановки без повторений – комбинаторные соединения, которые могут отличаться друг от друга лишь порядком входящих в них элементов. Число таких перестановок определяется как n!.

Для числа 3, количество перестановок будет равно 3! = 3 * 2 * 1 =

6. Для четырех: 4! = 4 * 3 * 2 * 1 = 24.

Часто для генерации перестановок используется алгоритм Дейкстры для получения всех перестановок по алфавиту. Разберем этот алгоритм.

Пусть у нас есть первая перестановка (например, 1234). Для нахождения следующей перестановки выполняем три шага.

1.    Двигаясь с предпоследнего элемента перестановки, ищем эле- мент a[i], удовлетворяющий неравенству a[i] < a[i + 1]. Для перестанов- ки 1234, это число 3, т. к. (3 < 4).

2.    Меняем местами элемент a[i] с наименьшим элементом, кото-


рый:


а) находится праве a[i].

б) является больше чем a[i]. В нашем случае меняем 3 и 4.

3.   Все элементы стоящие за a[i] сортируем. В нашем случае нужно


отсортировать число 4, но это единственный элемент, следовательно так его и оставляем.

В результате выполнения этих трех шагов получаем следующую по алфавиту перестановку 1243.

Выполнять эти шаги нужно циклически до тех пор, пока в пере- становке не будет находится искомый в первом шаге элемент a[i], т. е. пока перестановка не станет отсортированной по убыванию: 4321.


Перестановки с повторениями – комбинаторные соединения, в которых среди образующих элементов имеются одинаковые. В таких соединениях участвуют несколько типов объектов, причём имеется не- которое количество объектов каждого типа. Поэтому в выборках встре- чаются одинаковые элементы.

 

Задание 6. Гномики. Гномики решили встречать гостей с разно- цветными шарами. Раздай шарики гномикам так, чтобы цвет шарика не был такой же, как цвет колпачка, и чтобы у гномиков в одинаковых по цвету колпачках были шарики разного цвета и разной формы. Напиши- те программу, выводящую все возможные варианты раздачи шариков.

 

2x

Рис. 16.7. Иллюстрация к задаче «Гномики»

 

Задание 7. Имеются цифры от 1 до 9 расположенные по возраста- нию (убыванию). Требуется расставить между ними произвольное ко- личество знаков <<плюс>> и <<минус>>, чтобы получилось выражение со значением 100. Например

123+4-5+67-89 = 100

9-8+76-5+4+3+21 = 100


Найти все возможные варианты таких выражений.

 

Задача 8. Дан двумерный массив, заполненный нулями и единица- ми. Найти прямоугольник, наибольшей площади, заполненный едини- цами.

Площадь прямоугольников изменяется от максимальной (весь мас- сив) до минимальной (прямоугольник, состоящий из одной 1). Каждый прямоугольник конкретной площади может быть построен множеством способов. Для площади S допустимый прямоугольник это такой, произ- ведение сторон которого, равно S. Мы должны для каждого значения площади перебрать все допустимые способы построения прямоугольни- ков. Каждый прямоугольник конкретной площади и формы может рас- полагаться в массиве различным образом. Точнее сказать, его левая верхняя вершина может находиться в разных точках массива. Следова- тельно, для прямоугольника определённой площади и формы мы долж- ны перебрать все возможные расположения.

Может показаться, что программа для большого массива будет ра- ботать слишком долго, но есть серьёзные возможности для её ускоре- ния. А именно:

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

2.            Прямоугольник конкретной площади и формы не поместится в любом положении в массив.

Учёт этих утверждений ведёт к очень серьёзному ускорению про- граммы.

 

Задание 9. «Вирус». Колония клеток представляет собой квад- ратную матрицу порядка N (N < 500). В колонию проникает M (M < 11) вирусов, которые поражают клетки с координатами (X1, Y1), ... (Xm, Ym). За одну единицу времени вирус проникает в клетки, соседние с за- раженными (соседними считаются клетки, имеющие общую сторону). Требуется написать программу, которая определит время заражения всей колонии. Графически показать процесс заражения.

 

Задание 10. «Сундук Билли Бонса». Билли Бонс положил в сун- дук некоторое количество золотых монет. На второй год он вынул из сундука сколько-то монет. Начиная с третьего года, он добавлял столь- ко монет, сколько было в сундуке два года назад.


Требуется написать программу, определяющую количество монет в сундуке в первый и во второй года, если в X-м году там оказалось ровно Y монет. (3<=X<=20) и Y (1<=Y<=32767).

Пояснение: если в первый год положить 5 монет, а во второй год вынуть 3 монеты, то начиная с первого года в сундуке будет 5, 2, 7, 9,

16, 25, ... монет.


 

Скачано с www.znanio.ru