매직 라인 (사고 + 계산 기하학) (이상 2019 소 오프 여름 학교 캠프 (제 3 호))

예 :

입력 :

1
4
0 1
-1 0
1 0
0 -1

출력 : -19990000001 -999 000 001

질문의 의미 일련의 점을 소정의면에, (X1, Y1)를 찾기 위해, (X2 , Y2)은 두 개의 직선에 의해 포인트와 동수로 평면은 두 부분을 포함하는 분할 표시되는 직선이 어떤 지점을 통과 할 수없는 .

아이디어 :

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 struct node
 4 {
 5     int x,y;
 6 };
 7 bool cmp(node p,node q)
 8 {
 9     if(p.x==q.x)return p.y<q.y;
10     else return p.x<q.x;
11 }
12 node a[1020],b[1020];
13 int main()
14 {
15     int T,n;
16     scanf("%d",&T);
17     while(T--)
18     {
19         scanf("%d",&n);
20         for(int i=1; i<=n; i++)
21         {
22             scanf("%d%d",&a[i].x,&a[i].y);
23         }
24         sort(a+1,a+n+1,cmp);//直接对所有的线从左到右排序
25         printf("%d %d %d %d\n",a[n/2].x+1,a[n/2].y-999000000,a[n/2+1].x-1,a[n/2+1].y+999000000);
26     }
27     return 0;
28 }

 

추천

출처www.cnblogs.com/Aamir-Dan/p/11265258.html