1284E Codeforces. Новый год и замок Строительство (полярный угол + отсортировано перечисление сканирования)

Ссылка: https: //codeforces.com/problemset/problem/1284/E

Значение вопросов: Есть п точек на плоскости, прошу вас , сколько групп существуют четыре точки заключены четырехугольник строги окружили случай точки Р. Коллинеарная не существует.

Идеи: Во-первых, посмотрите на диапазон данных составляет 2500, вы можете сделать перечисление п ^ 2, мы можем перечислить дважды п. Фронт решения некоторых трудностей, решение обратной стороны можно рассматривать как подмножество числа групп не отвечают требований предметных, принять общее число подмножеств минус не удовлетворен ответом.

Тогда рассмотрит множество точек не соответствует смыслу вопросов.

Во-первых, если пара точек Р и Р1, так, что они соединяются с P в качестве эталона, относительная степень 0 градусов, перечислить все точки над линией P и P1, предполагается, что перечислены п точек, п точек плюс Р1, из числа пунктов 4, четыре точки должна быть свободна от четырехугольника точки Р, природой этого

Во-первых, полярный угол сортировки, чтобы сделать это снова, а затем край прикреплен к этой кромке составляет 0 градусов, начинает сканирование всех точек от 0 до 180 градусов на этой стороне, и три точки произвольно выбранных из C (N, 3), и P1 состоящие из замкнутого четырехугольника не окружает P1, статистика не удовлетворяет все условия, установленные точек, с общим набором точек

Количество С (п, 5) - количество комбинаций не удовлетворяется ответом.

 (Как показано, P1, P2, P3, P4 не четырехугольник, окруженный замкнутой точке P.)

 

AC код:

1 #include <iostream>
 2 #include <вектор>
 3 # include <cstdlib>
 4 #include <cstdio>
 5 #include <Алгоритм>
 6 #include <CMATH>
 7 #include <CString>
 8 #include <очереди>
 9 # включают в себя <карта>
 10 с  использованием  пространства имен STD;
11 ЬурейеЕ долго  долго LL;
12  константные  длинный  двойной PI = ACOS (- 1 . 0L );
13  Const  INT maxn = 2e3 + 600 ;
14 длинные  двойные х [maxn], у [maxn];
15  INT основных ()
 16  {
 17      INT N; CIN >> п;
18      LL ANS = (LL) п * (п - 1 ) * (n - 2 ) * (n - 3 ) * (n - 4 ) / 24 ; 
19      для ( Int I = 0 ; я <п; я ++ ) {
 20          LL XI, уг;
21          CIN >> XI >> уг;
22          х [г] = х, у [I] = уг;
23      }
 24      для ( INT I =0 ; я <п, я ++ ) {
 25          Вектор < Длинные  Двойной > В;
 26          для ( Int J = 0 , J <п; j ++ ) {
 27              ЕСЛИ (J == I) , Продолжить ;
 28              v.push_back (из atan2 (Y [Дж] -Y [I], X [J] , -X- [I])); // кол угол 
29          }
 30          Сортировка (v.begin (), v.end ()); // сделать сортировку полярный угол 
31          INT к = N- , 1. , CUR = 0 ;
 32          для ( INT J = 0, J <K; j ++ ) {
 33              это время (CUR <J + K) { // Перечисление удвоение числа точек 
34                  Длинные  Двойной угол V = [K CUR%] - В [Дж]; // Перечисление два угол кромки 
35                  IF (угол < 0 ) = угол + 2 * PI; // если угол меньше 0, 2 * увеличение пи переворот 
36                  ПЧ (угол <ПИ) CUR ++; // если точка в перечислении выше этой линии, то ++ CUR 
37 [                  остальное  BREAK ;
 38              }
 39              Длинные  Длинные CNT = CUR - J - 1. ;
 40              ans- CNT = 1LL * * (The CNT- 1. ) * (The CNT- 2) / 6 ;
41          }
 42      }
 43      COUT << ANS;
44      возвращения  0 ;
45 }

рекомендация

отwww.cnblogs.com/AaronChang/p/12185462.html