Безотлагательно!!! Задачка в С++ Входные данныеВ первой строке вводится одно число

Безотлагательно!!! Задачка в С++
Входные данные
В первой строке вводится одно число N (3N100000). Далее в 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

Задать свой вопрос
1 ответ

Уравнение прямой

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

Мы знаем координаты 2-ух точек, лежащих на прямой. Обозначим их как (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


Решение

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

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

Т.е., мы перебираем каждое ребро и глядим, чтобы другие точки были 1-го знака.

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

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


Код

include lt;bits/stdc++.hgt;


using namespace std;


 

int main()


 int n;


 cin gt;gt; n;


 long double x[n+2];


 long double y[n+2];


 for (int i = 0; i lt; n; i++)


   cin gt;gt; x[i] gt;gt; 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 lt; 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) lt; 0)


     cout lt;lt; "NO" lt;lt; endl;


     return 0;


   


 


 cout lt;lt; "YES" lt;lt; endl;


 return 0;



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


Последние вопросы

Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт