Присоединиться

Информатика·Задания Д27 C4. Программирование·11 класс

Необходимо найти количество треугольников, обладающих следующими

Условие

На плоскости задано множество точек с целочисленными координатами, никакие две из которых не совпадают и никакие три не лежат на одной прямой. Необходимо найти количество треугольников, обладающих следующими свойствами: 1) все вершины треугольника принадлежат заданному множеству;2) ни одна вершина не лежит на осях координат;3) треугольник не пересекается с осью Ox, но пересекается с осью Oy. Напишите эффективную по времени и по используемой памяти программу для решения этой задачи.Программа считается эффективной по времени, если при увеличении количества точек в k раз время работы возрастает не более чем в k раз. Программа считается эффективной по памяти, если размер памяти для хранения всех необходимых данных не зависит от количества точек и не превышает 1 килобайта.Перед текстом программы кратко опишите алгоритм решения и укажите язык программирования и его версию.Входные данныеВ первой строке задаётся N - количество точек в заданном множестве. Каждая из следующих строк содержит два целых числа x и y - координаты очередной точки. Гарантируется, что 1 ≤ N ≤ 10000, -1000 ≤ x, y ≤ 1000, никакие две точки не совпадают, никакие три не лежат на одной прямой. Пример входных данных:46 6−8 8−9 −97 5 Выходные данныеНеобходимо вывести единственное число: количество удовлетворяющих требованиям треугольников. Пример выходных данных для приведённого выше примера входных данных:1 Критерии оценивания выполнения задания | Баллы | Программа правильно работает для любых входных данных произвольного размера и находит ответ, не сохраняя входные данные в массиве. Допускается наличие в тексте программы одной синтаксической ошибки: пропущен или неверно указан знак пунктуации, неверно написано или пропущено зарезервированное слово языка программирования, не описана или неверно описана переменная, применяется операция, недопустимая для соответствующего типа данных (если одна и та же ошибка встречается несколько раз, то это считается за одну ошибку). | 4 | Не выполнены условия, позволяющие поставить 4 балла, при этом программа работает верно, время работы линейно зависит от N, но размер используемой памяти зависит от количества точек. Например, входные данные запоминаются в массиве или другой структуре данных, размер которой соответствует числу N. Допускается одна из следующих ошибок. 1. Пропущенная или неверная инициализация количества точек. В некоторых языках и системах программирования (например, в Бейсике) все переменные после создания имеют значение 0. В этом случае отсутствие инициализации нельзя считать ошибкой. 2. Неверные сравнения, в результате которых учитываются точки, лежащие на осях координат. 3. Учёт одного треугольника несколько раз из-за разной последовательности перечисления вершин (например, отсутствие деления на 2 в решении, аналогичном приведённому выше). 4. Учёт треугольников, содержащих одну и ту же вершину дважды (например, отсутствие вычитания в решении, аналогичном приведённому выше). Допускается наличие от одной до трёх синтаксических ошибок, описанных в критериях на 4 балла. | 3 | Не выполнены условия, позволяющие поставить 3 или 4 балла, при этом программа работает верно, эффективно или нет. В частности, в 2 балла оцениваются переборные решения, в которых все исходные данные сохраняются в массиве, рассматриваются все возможные треугольники, из которых выбираются подходящие. Допускается наличие нескольких содержательных ошибок, описанных в критериях на 3 балла, и до пяти синтаксических ошибок, описанных в критериях на 4 балла. | 2 | ННе выполнены условия, позволяющие поставить 2, 3 или 4 балла, но программа работает в отдельных частных случаях. | 1 | Не выполнены критерии, позволяющие поставить 1, 2, 3 или 4 балла | 0 | Максимальный балл | 4 |

Формат задания

Развёрнутый ответ: короткого ответа здесь нет — оценивается само рассуждение. Ниже разбор по шагам.

Решение по шагам

  1. Как рассуждать

    Решение. Чтобы треугольник не пересекался с осью Ox и пересекался с осью Oy, его вершины должны лежать в одной полуплоскости относительно Ox и в разных относительно Oy. Получается, что вершины треугольника должны лежать в первой и второй либо в третьей и четвёртой четвертях, причём в одной из этих четвертей должны лежать две вершины, в другой — одна.Зная количество точек в каждой четверти, можно подсчитать количество искомых треугольников. Например, если в первой четверти лежит n1 точек, а во второй — n2 точек, то количество треугольников, у которых две вершины лежат в первой четверти, а одна - во второй, равно (n1(n1-1)/2) * n2 = n1(n1-1)n2/2.Если известны величины n1, n2, n3, n4, показывающие количество точек в каждой четверти, то общее количество треугольников равно (n1(n1-1)n2 + n2(n2-1)n1 + n3(n3-1)n4 + n4(n4-1)n3) /

Осталось ещё 1 шаг — откроются после входа:

  • Шаг 2
Получить полное решение

Бесплатно · займёт минуту

Другие задачи по теме «Задания Д27 C4. Программирование»