NEFU 922 判断线段相交
2015-06-09 20:19
323 查看
http://acm.nefu.edu.cn/JudgeOnline/problemshow.php?problem_id=922
[code]#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> using namespace std; typedef struct { int x,y; }sa; int chaji(sa a,sa b,sa c)//计算ca和cb { return (a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y); } bool online(sa a,sa b,sa c) //判断点c是否在线段ab上 { if(min(a.x,b.x)<=c.x&&c.x<=max(a.x,b.x)) { if(min(a.y,b.y)<=c.y&&c.y<=max(a.y,b.y)) { return 1; } } return 0; } bool xj(sa a,sa b,sa c,sa d) { int d1=chaji(c,d,a);//计算ac,ad int d2=chaji(c,d,b);//bc,bd int d3=chaji(a,b,c);//ca,cb int d4=chaji(a,b,d);//db,da if(d1*d2<0&&d3*d4<0) return 1; else if(d1==0&&online(c,d,a)) return 1; else if(d2==0&&online(c,d,b)) return 1; else if(d3==0&&online(a,b,c)) return 1; else if(d4==0&&online(a,b,d)) return 1; return 0; } int main() { sa data[5]; int m; while(cin>>m&&m) { while(m--) { for(int i=0;i<4;i++) cin>>data[i].x>>data[i].y; if(xj(data[0],data[1],data[2],data[3])) cout<<"YES"<<endl; else cout<<"no"<<endl; } } return 0; }
相关文章推荐
- 【华为OJ】取近似值
- Servlet学习(二)
- java对象的内存布局(一):计算java对象占用的内存空间以及java object layout工具的使用
- 若一头小母牛,从出生起第四个年头开始每年生一头母牛,按此规律,第n年时有多少头母牛?
- LeetCode——Add Two Numbers
- UITableViewCell点击时改变文本颜色
- 解决Notice错误,性能竟然提升了1000多倍!
- servlet 多选框 键值对 传action 实例
- 小玩文件
- 总结,团队贡献分,用户调研
- LeetCode-Two sum
- Result Maps collection already contains value for
- 安装rlwrap for linux
- 使用.net和jquery实现一对一的网页聊天系统
- 一起学CUDA(一)
- 集合框架3+System+Runtime+Date+Math
- 一起学CUDA(零)
- 二次函数积分面积【数学】
- 第5题
- 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离