• СРОЧНО!!! Задача в С++
    Входные данные
    В первой строке вводится одно число N (3≤N≤100000). Далее в N строках задается по паре чисел – координаты очередной вершины простого многоугольника в порядке обхода по или против часовой стрелки.

    Выходные данные
    Выведите одну строку: “YES”, если приведённый многоугольник является выпуклым, и “NO” в противном случае.

    Примеры
    входные данные
    3
    0 0
    0 1
    1 0
    выходные данные
    YES
    входные данные
    6
    0 0
    0 2
    1 2
    1 1
    2 1
    2 0
    выходные данные
    NO

Ответы 4

  • Большое Спасибо! Понимаю, что наглею, не могли бы подсказать еще на счет этой: Входные данныеШесть чисел – координаты центра и радиус окружности и коэффициенты A, B и C нормального уравнения прямой.Выходные данныеВ первой строке одно число K, равное количеству точек пересечения прямой с окружностью. Далее в K строках координаты самих точек.Примерывходные данные2 3 1 1 -1 0выходные данные23.00000 3.000002.00000 2.00000 Если у вас есть время, конечно)
    • Автор:

      jamir
    • 5 лет назад
    • 0
  • Задайте, пожалуйста, для этого вопрос. Сервис рассчитан на то, что эти ответы понадобятся ещё не раз разным людям.
  • https://znanija.com/task/30511870
    • Автор:

      frodo
    • 5 лет назад
    • 0
  • Уравнение прямой

    Общее уравнение прямой: Ax + By + C = 0

    Мы знаем координаты двух точек, лежащих на прямой. Обозначим их как (x_1; y_1) и (x_2;y_2). Тогда:

    A=y_2-y_1\\B=x_1-x_2\\C=y_1x_2-x_1y_2

    Решение

    Мы знаем координаты точек многоугольника.

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

    Т.е., мы перебираем каждое ребро и смотрим, чтобы остальные точки были одного знака.

    Оказывается, смотреть все точки необязательно! Нам нужно проверить каждое ребро, чтобы сказать ответ. Поэтому, нам достаточно смотреть лишь положение двух соседних с этим ребром точек относительно ребра.

    Итого, мы должны для каждого ребра убедиться, что две соседних с этим ребром точки лежат по одну сторону от ребра. Вот и всё.

    Код

    #include <bits/stdc++.h>

    using namespace std;

     

    int main() {

     int n;

     cin >> n;

     long double x[n+2];

     long double y[n+2];

     for (int i = 0; i < n; i++) {

       cin >> x[i] >> y[i];

     }

     x[n] = x[0];

     y[n] = y[0];

     x[n+1] = x[1];

     y[n+1] = y[1];

     for (int i = 1; i < n; i++) {

       long double a = y[i+1] - y[i];

       long double b = x[i] - x[i+1];

       long double c = y[i] * x[i+1] - x[i]*y[i+1];

       if ((a*x[i-1]+b*y[i-1]+c)*(a*x[i+2]+b*y[i+2]+c) < 0) {

         cout << "NO" << endl;

         return 0;

       }

     }

     cout << "YES" << endl;

     return 0;

    }

    • Автор:

      cory44
    • 5 лет назад
    • 0
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years