德莱联盟
时间限制:
1000 ms | 内存限制:
65535 KB
难度:1
-
描述
-
欢迎来到德莱联盟。。。。
德莱文。。。
德莱文在逃跑,卡兹克在追。。。。
我们知道德莱文的起点和终点坐标,我们也知道卡兹克的起点和中点坐标,问:卡兹克有可能和德莱文相遇吗?,并且保证他们走的都是直线。
-
输入
-
几组数据,一个整数T表示T组数据
每组数据 8个实数,分别表示德莱文的起点和终点坐标,以及卡兹克的起点和终点坐标
输出
- 如果可能 输出 Interseetion,否则输出 Not Interseetion 样例输入
-
2-19.74 7.14 22.23 -27.45 -38.79 -5.08 47.51 34.01-8.61 9.91 -32.47 6.47 -3.81 -16.1 7.82 -6.37
样例输出
-
InterseetionNot Interseetion
-
参考了这个博客,写的很好:http://www.cnblogs.com/zhangchaoyang/articles/2668562.html
-
#include<iostream> using namespace std; int px(double x1,double y1,double x2,double y2 ){ //判断p0p1 在 p0p2 的哪一侧 double chacheng = x1*y2-x2*y1; if(chacheng > 0) return 1; else if(chacheng == 0) return 0; else if(chacheng < 0) return -1; } // 在线段上还是在其延长线上 bool dy(double x,double y,double x1,double y1,double x2 ,double y2) { if(x1>x2) swap(x1,x2); if(y1>y2) swap(y1,y2); if(x>=x1 && x <= x2 && y >= y1 && y <= y2) return true; else return false; } int main() { int T; cin>>T; double x1,x2,x3,x4,y1,y2,y3,y4; while(cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4) { int s1,s2,s3,s4; s1 = px(x4-x1,y4-y1,x2-x1,y2-y1); s2 = px(x3-x1,y3-y1,x2-x1,y2-y1); s3 = px(x1-x3,y1-y3,x4-x3,y4-y3); s4 = px(x2-x3,y2-y3,x4-x3,y4-y3); int a,b; //可能有一个点在线段上 if(s1==0 || s2==0 || s3==0 ||s4 == 0){ if(s1 ==0){ if(dy(x4,y4,x1,y1,x2,y2)) cout<<"Interseetion"<<endl; else cout<<"Not Interseetion"<<endl; }else if(s2 == 0){ if(dy(x3,y3,x1,y1,x2,y2)) cout<<"Interseetion"<<endl; else cout<<"Not Interseetion"<<endl; }else if(s3 == 0){ if(dy(x1,y1,x3,y3,x4,y4)) cout<<"Interseetion"<<endl; else cout<<"Not Interseetion"<<endl; }else if(s4 == 0){ if(dy(x2,y2,x3,y3,x4,y4)) cout<<"Interseetion"<<endl; else cout<<"Not Interseetion"<<endl; } }else { if(s1 == 1 && s2 == -1 || s2 == 1 && s1 == -1) a = 1; else a = 0; if(s3 == 1 && s4 == -1 || s4 == 1 && s3 == -1) b = 1; else b = 0; if(a&&b) cout<<"Interseetion"<<endl; else cout<<"Not Interseetion"<<endl; } } return 0; }
-
几组数据,一个整数T表示T组数据
1170

被折叠的 条评论
为什么被折叠?



