璇佹槑錛氳嫢瀛樺湪涓鏉$洿綰縧鍜屾墍鏈夌嚎孌電浉浜わ紝浣滀竴鏉$洿綰縨鍜宭鍨傜洿錛屽垯m灝辨槸棰樹(shù)腑瑕佹眰鐨勭洿綰匡紝鎵鏈夌嚎孌墊姇褰辯殑涓涓叕鍏辯偣鍗充負(fù)鍨傝凍銆傦紙l鍜屾瘡鏉$嚎孌電殑浜ょ偣娌縧鎶曞獎(jiǎng)鍒癿涓婄殑鍨傝凍澶勶級(jí)
鍙嶈繃鏉ワ紝鑻ュ瓨鍦╩錛屾墍鏈夌嚎孌靛湪m涓婄殑鎶曞獎(jiǎng)鏈夊叕鍏辯偣錛屽垯榪囪繖鐐瑰瀭鐩翠簬m浣滅洿綰縧錛宭涓瀹氬拰鎵鏈夌嚎孌電浉浜ゃ?
鐒跺悗璇佸瓨鍦╨鍜屾墍鏈夌嚎孌電浉浜ょ瓑浠蜂簬瀛樺湪l榪囨煇涓ゆ潯綰挎鐨勫悇涓涓鐐逛笖鍜屾墍鏈夌嚎孌電浉浜ゃ?br>鍏呭垎鎬ф樉鐒躲傚繀瑕佹э細(xì)鑻ユ湁l鍜屾墍鏈夌嚎孌電浉浜わ紝鍒欏彲淇濇寔l鍜屾墍鏈夌嚎孌電浉浜わ紝宸﹀彸騫崇Щl鍒板拰鏌愪竴綰挎浜や簬绔偣鍋滄錛?#8220;縐諱笉鍔ㄤ簡(jiǎn)”錛夈傜劧鍚庣粫榪欎釜浜ょ偣鏃嬭漿銆備篃鏄漿鍒?#8220;杞笉鍔ㄤ簡(jiǎn)”錛堝拰鍙︿竴綰挎浜や簬鍏朵竴涓鐐癸級(jí)涓烘銆傝繖鏍峰氨鎵懼埌浜?jiǎn)涓涓柊鐨刲銆?/p>
浜庢槸鏈鍙綊緇撲負(fù)鏋氫婦涓や袱綰挎鐨勫悇涓涓鐐癸紝榪炰竴鏉$洿綰匡紝鍐嶅垽鏂墿涓嬬殑綰挎鏄惁閮藉拰榪欐潯鐩寸嚎鏈変氦鐐廣?/p>
緇嗚妭錛?You must assume that two floating point numbers a and b are equal if |a - b| < 10^-8.
鍗曟潯鐩寸嚎蹇?Yes
1
2
#include<stdio.h>
3
#include <stdlib.h>
4
#include <math.h>
5
#define N 101
6
#define MAXN 1000
7
#define offset 10000
8
#define eps 1e-8
9
#define zero(x) (((x)>0?(x):-(x))<eps)
10
#define _sign(x) ((x)>eps?1:((x)<-eps?2:0))
11
struct point
{double x,y;};
12
struct line
{point a,b;};
13
14
int n;
15
line arr[N];
16
17
double xmult(point p1,point p2,point p0)
{
18
return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
19
}
20
int same_side(point p1,point p2,point l1,point l2)
{
21
return xmult(l1,p1,l2)*xmult(l1,p2,l2)>eps;
22
}
23
24
int IsConver(int i,int j,point a,point b)
{
25
int step;
26
for(step=0;step<n;step++)
27
if(step!=i&&step!=j)
{
28
if(same_side(arr[step].a,arr[step].b,a,b)) return 0;
29
}
30
return 1;
31
}
32
33
int Find()
{
34
int i,j,flag;
35
flag=0;
36
for(i=0;i<n;i++)
37
for(j=0;j<n;j++)
{
38
if(i!=j)
{
39
flag=1;
40
if(
41
!zero(sqrt((arr[i].a.x-arr[j].a.x)*(arr[i].a.x-arr[j].a.x)+(arr[i].a.y-arr[j].a.y)*(arr[i].a.y-arr[j].a.y))) &&
42
IsConver(i,j,arr[i].a,arr[j].a)
43
)
44
return 1;
45
46
if(
47
!zero(sqrt((arr[i].b.x-arr[j].b.x)*(arr[i].b.x-arr[j].b.x)+(arr[i].b.y-arr[j].b.y)*(arr[i].b.y-arr[j].b.y))) &&
48
IsConver(i,j,arr[i].b,arr[j].b)
49
)
50
return 1;
51
52
if(
53
!zero(sqrt((arr[i].a.x-arr[j].b.x)*(arr[i].a.x-arr[j].b.x)+(arr[i].a.y-arr[j].b.y)*(arr[i].a.y-arr[j].b.y))) &&
54
IsConver(i,j,arr[i].a,arr[j].b)
55
)
56
return 1;
57
58
if(
59
!zero(sqrt( (arr[i].b.x-arr[j].a.x)*(arr[i].b.x-arr[j].a.x)+(arr[i].b.y-arr[j].a.y)*(arr[i].b.y-arr[j].a.y))) &&
60
IsConver(i,j,arr[i].b,arr[j].a)
61
)
62
return 1;
63
64
}
65
}
66
if(flag==0) return 1;
67
else return 0;
68
}
69
70
int main()
{
71
int t,_case,i,j,step;
72
scanf("%d",&t);
73
for(_case=0;_case<t;_case++)
{
74
scanf("%d",&n);
75
for(i=0;i<n;i++)
76
scanf("%lf%lf%lf%lf",&arr[i].a.x,&arr[i].a.y,&arr[i].b.x,&arr[i].b.y);
77
78
if(Find()) printf("Yes!\n");
79
else printf("No!\n");
80
}
81
return 0;
82
}
83

]]>