题目链接:http://poj.org/problem?id=1410
题解:以前一直都是用叉积来求解的 这次看到一个代数几何的解法 果断学习了 O(∩_∩)O
此题巨坑:①线段在矩形内也是与矩形相交
②不一定是左上和右下 需要判断 坑爹~~~~(>_<)~~~~
#include<iostream> #include<algorithm> using namespace std; int main () { int T; scanf("%d", &T); while(T--) { int x1,y1,x2,y2,x_1,y_1,x_2,y_2; scanf("%d %d %d %d %d %d %d %d", &x1, &y1, &x2, &y2, &x_1, &y_1, &x_2, &y_2); int a = y2-y1, b = x1-x2, c = y1*x2-y2*x1; if( (a*x_1+b*y_1+c >=0 && a*x_2+b*y_1+c <=0) || (a*x_2+b*y_1+c >=0 && a*x_2+b*y_2+c <=0) || (a*x_2+b*y_2+c >=0 && a*x_1+b*y_2+c <=0) || (a*x_1+b*y_2+c >=0 && a*x_1+b*y_1+c <=0)) { if(x_1 > x_2) swap(x_1,x_2); if(y_1 < y_2) swap(y_1,y_2); if( (x1<x_1 && x2<x_1) ||(x1>x_2 && x2>x_2) ||(y1<y_2 && y2<y_2) ||(y1>y_1 && y2>y_1)) puts("F"); else puts("T"); } else puts("F"); } return 0; }