本来是奔着做线段求交去的qwq
结果是个直线求交...
直接用课本知识求个一般式然后搞就行
(话说这个代码应该加一句a1==0||a2==0时把a变成b)
但是poj数据水就过了
Code:
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define ms(a,b) memset(a,b,sizeof a) 5 #define rep(i,a,n) for(int i = a;i <= n;i++) 6 #define per(i,n,a) for(int i = n;i >= a;i--) 7 #define inf 2147483647 8 using namespace std; 9 typedef long long ll; 10 typedef double D; 11 #define eps 1e-8 12 ll read() { 13 ll as = 0,fu = 1; 14 char c = getchar(); 15 while(c < '0' || c > '9') { 16 if(c == '-') fu = -1; 17 c = getchar(); 18 } 19 while(c >= '0' && c <= '9') { 20 as = as * 10 + c - '0'; 21 c = getchar(); 22 } 23 return as * fu; 24 } 25 //head 26 #define R(x) scanf("%lf",&x) 27 D x1,x2,x3,x4; 28 D y1,y2,y3,y4; 29 D a1,b1,c1; 30 D a2,b2,c2; 31 D d,ansx,ansy; 32 void solve() { 33 R(x1),R(y1),R(x2),R(y2),R(x3),R(y3),R(x4),R(y4); 34 a1 = x1-x2,b1 = y2-y1,c1 = x1*y2-x2*y1; 35 a2 = x3-x4,b2 = y4-y3,c2 = x3*y4-x4*y3; 36 d = a1*b2-a2*b1; 37 if(d == 0) return void(c1/a1 == c2/a2 ? puts("LINE") : puts("NONE")); 38 D ansy = (b2*c1-b1*c2) / d; 39 D ansx = (a1*c2-a2*c1) / d; 40 printf("POINT %.2lf %.2lf\n",ansx,ansy); 41 } 42 43 int main() { 44 int T = read(); 45 puts("INTERSECTING LINES OUTPUT"); 46 while(T--) solve(); 47 puts("END OF OUTPUT"); 48 return 0; 49 }