Warning: Illegal string offset 'html' in /var/www/lvp37/data/www/lvp37.ru/cache/skin_cache/cacheid_1/skin_topic.php on line 909
Выпуклая оболочка Грехэма (сортировка по косому произведению) - олимпиадники-информатики

Перейти к содержимому


Выпуклая оболочка Грехэма (сортировка по косому произведению)


В этой теме нет ответов

#1 LVP

    Продвинутый пользователь

  • Администраторы
  • 196 сообщений
  • ГородВитебск

Отправлено 24 October 2020 - 11:57

Код от Кузьмичева Алексея, нахождения выпуклой оболочки по Алгоритму Грехема , используя сортировку точек по Углу через косое произведение векторов (решение задачи Informatics/mccme.ru 1877)

#include <bits/stdc++.h>
 
using namespace std;
 
struct point /// структура обозначающая точку в нашей системе координат
{
	int x, y;
};
 
point fst; /// 1 - я точка
 
long long dist_sq(int x1 , int y1 , int x2 , int y2) { /// функция, которая возвращает квадрат расстояние от 1-й точки до другой
	long long X1 = x1 , X2 = x2 , Y1 = y1 , Y2 = y2;
	return ((X1 - X2) * (X1 - X2) + (Y1 - Y2) * (Y1 - Y2));
}
 
long long cross (point a1, point a2, point b1, point b2) /// функция, которая возвращает косое произведение векторов
{
return 1ll * (a2.x - a1.x) * (b2.y - b1.y) - 1ll * (b2.x - b1.x) * (a2.y - a1.y);
}
 
bool comporator(point l , point r) { /// компоратор для сравнения значений косого произведения в sort
	if (cross(l , fst , fst , r) < 0) {
    	return 1;
	}
	if (cross(l , fst , fst , r) == 0 && dist_sq(fst.x , fst.y , l.x , l.y) < dist_sq(fst.x , fst.y , r.x , r.y)) {
    	return 1;
	}
	return 0;
}
 
int main() {
	int n;
	cin >> n;
	point a[n];
	for (int i = 0; i < n; i++) { /// считывание + нахождение самой левой точки из самых нижних
    	cin >> a[i].x >> a[i].y;
    	if (a[0].y > a[i].y) {
        	swap(a[0] , a[i]);
    	} else {
        	if (a[0].y == a[i].y && a[i].x < a[0].x) {
            	swap(a[0] , a[i]);
        	}
    	}
	}
	fst = a[0]; /// самая первая точка
	sort(a + 1 , a + n , comporator); /// сортировка(от второй точки)
	deque <point> st; /// стек для построения оболочки
	st.push_back(a[0]);
for (int i = 1; i < n; i++) /// проход по алгоритму построения
{
  while (st.size() > 1 && cross(st[st.size() - 2] , st[st.size() - 1] , st[st.size() - 1] , a[i]) <= 0)
  {
        	st.pop_back();
  }
        	if (st.back().x != a[i].x || st.back().y != a[i].y) st.push_back(a[i]);
  }
 
	if (n % 2 != 0) { /// т.к. в 1877 если n нечетно нужно вывести оболочку по часовой стрелке, то развернём стек
    	reverse(st.begin() , st.end());
	}
 
	cout << st.size() << endl;
	for (auto to : st) { /// вывод оболочки
    	cout << to.x << " " << to.y << endl;
	}
	return 0;
}

Виктория Павловна

#2 Thomasjeoth

    Новичок

  • Пользователи
  • Pip
  • 0 сообщений
  • ГородHo Chi Minh City

Отправлено 27 October 2020 - 20:32

служба доставки спб http://footwear.ua/f...offset_detail=0 служба доставки kfc

#3 Thomasjeoth

    Новичок

  • Пользователи
  • Pip
  • 0 сообщений
  • ГородHo Chi Minh City

Отправлено 27 October 2020 - 20:33

вологда службы доставки https://forumofworld...t279-topic#1830 ижевск служба доставки

#4 Thomasjeoth

    Новичок

  • Пользователи
  • Pip
  • 0 сообщений
  • ГородHo Chi Minh City

Отправлено 27 October 2020 - 20:33

служба доставки вологда https://new-journals.../26-1434-1#4702 доставки службой сдэк

#5 Thomasjeoth

    Новичок

  • Пользователи
  • Pip
  • 0 сообщений
  • ГородHo Chi Minh City

Отправлено 27 October 2020 - 20:34

служба доставки стрела http://forum.c-o-k.c...&p=41920#p41920 бокс служба доставки

#6 Thomasjeoth

    Новичок

  • Пользователи
  • Pip
  • 0 сообщений
  • ГородHo Chi Minh City

Отправлено 27 October 2020 - 20:34

служба доставки имл http://moneygroup.in...g17407#msg17407 якитория служба доставки

#7 Thomasjeoth

    Новичок

  • Пользователи
  • Pip
  • 0 сообщений
  • ГородHo Chi Minh City

Отправлено 27 October 2020 - 20:35

дубна службы доставки http://www.bakinsky-...ary#message3240 07ex служба доставки

#8 Thomasjeoth

    Новичок

  • Пользователи
  • Pip
  • 0 сообщений
  • ГородHo Chi Minh City

Отправлено 27 October 2020 - 20:35

служба доставки мосгорпицца http://www.fc-sherif...m/fx/140/17838/ служба доставки киров

#9 Thomasjeoth

    Новичок

  • Пользователи
  • Pip
  • 0 сообщений
  • ГородHo Chi Minh City

Отправлено 27 October 2020 - 20:36

служба доставки реутов http://dso.kiev.ua/k....html#post20994 служба доставки dpd

#10 Thomasjeoth

    Новичок

  • Пользователи
  • Pip
  • 0 сообщений
  • ГородHo Chi Minh City

Отправлено 27 October 2020 - 20:36

служба доставки интайм http://kharkovremont...8#comment-23015 служба курьерской доставки

#11 Thomasjeoth

    Новичок

  • Пользователи
  • Pip
  • 0 сообщений
  • ГородHo Chi Minh City

Отправлено 27 October 2020 - 20:37

служба доставки уфа https://www.rsd.in.u...5002#entry15002 крым службы доставки

#12 Thomasjeoth

    Новичок

  • Пользователи
  • Pip
  • 0 сообщений
  • ГородHo Chi Minh City

Отправлено 27 October 2020 - 20:37

москва службы доставки http://www.bukmekers...=120893#p120893 службы курьерской доставки

#13 Thomasjeoth

    Новичок

  • Пользователи
  • Pip
  • 0 сообщений
  • ГородHo Chi Minh City

Отправлено 27 October 2020 - 20:38

якитория служба доставки https://potenciya.or...8651.html#p8651 дчл служба доставки

#14 Thomasjeoth

    Новичок

  • Пользователи
  • Pip
  • 0 сообщений
  • ГородHo Chi Minh City

Отправлено 27 October 2020 - 20:38

служба доставки достоевский http://moneygroup.in...g16665#msg16665 служба доставки тверь

#15 Thomasjeoth

    Новичок

  • Пользователи
  • Pip
  • 0 сообщений
  • ГородHo Chi Minh City

Отправлено 27 October 2020 - 20:39

новороссийск службы доставки https://forumofworld...t280-topic#1556 служба доставки даймэкс

#16 Thomasjeoth

    Новичок

  • Пользователи
  • Pip
  • 0 сообщений
  • ГородHo Chi Minh City

Отправлено 27 October 2020 - 20:39

служба доставки уфа http://myfamily.myfo...?id=1740#p22342 птичка служба доставки

#17 Thomasjeoth

    Новичок

  • Пользователи
  • Pip
  • 0 сообщений
  • ГородHo Chi Minh City

Отправлено 27 October 2020 - 20:40

служба доставки пикпоинт http://forums.gioc-k...&p=37623#p37623 службы доставки тверь

#18 Thomasjeoth

    Новичок

  • Пользователи
  • Pip
  • 0 сообщений
  • ГородHo Chi Minh City

Отправлено 27 October 2020 - 20:40

служба доставки аниме http://forex.myforum...hp?id=751#p1803 служба доставки exline

#19 Thomasjeoth

    Новичок

  • Пользователи
  • Pip
  • 0 сообщений
  • ГородHo Chi Minh City

Отправлено 27 October 2020 - 20:41

служба доставки подольск http://moneygroup.in...g18100#msg18100 служба доставки boxberry

#20 Thomasjeoth

    Новичок

  • Пользователи
  • Pip
  • 0 сообщений
  • ГородHo Chi Minh City

Отправлено 27 October 2020 - 20:41

служба доставки гатчина https://www.tapatalk...716.html#p14047 служба доставки фарфор





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анононимных