1 /*对于一条满足条件的直线,向下移,直到触碰一条线段的下端点,仍然经过其它线段,该直线仍然满足条件
2 即以一条线段的下(上)端点作为直线上的一点,求为了经过一条线段的最小、最大斜率值(mink,maxk),直线斜率要求满足
3 max(mink1,mink2,…,minkn) <= min(maxk1,maxk2,…,maxkn)
4 */
5
6 #include <cstdio>
7 #include <cstdlib>
8 #include <cmath>
9 #include <cstring>
10 #include <stdbool.h>
11 #include <set>
12 #include <vector>
13 #include <map>
14 #include <queue>
15 #include <algorithm>
16 #include <iostream>
17 using namespace std;
18 #define maxn 10005
19 #define inf 1e10
20
21 double x[maxn],yl[maxn],yh[maxn];
22
23 int main()
24 {
25 long n,i,k,c;
26 double a,b,p,q,t,xx,yy;
27 scanf("%ld",&n);
28 for (i=1;i<=n;i++)
29 scanf("%lf%lf%lf",&x[i],&yh[i],&yl[i]);
30 for (k=1;k<=n;k++)
31 {
32 p=inf;
33 q=-inf;
34 for (i=1;i<=n;i++)
35 if (i!=k)
36 {
37 a=(yh[i]-yl[k])/(x[i]-x[k]);
38 b=(yl[i]-yl[k])/(x[i]-x[k]);
39 if (a<b)
40 {
41 t=a;
42 a=b;
43 b=t;
44 c=0;
45 }
46 else
47 c=1;
48 if (p<b || q>a)
49 break;
50 // p=min(p,a);
51 if (a<p)
52 {
53 p=a;
54 if (c==1)
55 {
56 yy=yh[i];
57 xx=x[i];
58 }
59 else
60 {
61 yy=yl[i];
62 xx=x[i];
63 }
64 }
65 q=max(q,b);
66 }
67 if (i==n+1)
68 {
69 printf("%.0lf %.0lf %.0lf %.0lf",x[k],yl[k],xx,yy);
70 return 0;
71 }
72 }
73 return 0;
74 }