poj1269 Intersecting Lines

传送门

本来是奔着做线段求交去的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 }

猜你喜欢

转载自www.cnblogs.com/yuyanjiaB/p/9996142.html