sicily 1004之线段判断
来源:互联网 发布:汉字译拼音软件 编辑:程序博客网 时间:2024/05/21 16:58
因为今天中午,不知道为何,sicily服务器挂了,登不上去,ping后发现ip不通,不管它,等他能上了,我再交代码吧
题目是1004,可以百度一下sicily1004,有些博客会黏贴sicily的题目。
这道题是判断线段是否重叠的题目,题目会输入x1, y1, x2, y2,分别是改线段两个端点的坐标。因为线段是直线的一部分,所以最开始我是直接利用这两个坐标算出y=kx+b中的k和b,想着只要k和b一样,那就是重叠了。结果提交上去,WA超多次,我都郁闷了。今天早上才意识到,这是线段,不是直线,既然是线段,就会有端点,那么这道题就要想办法根据这输入的两个点的坐标,设计一个结构来使得接下来的排序啊和判断是否重叠更好的进行。待续,未完,代码就不改了,毕竟还没AC。
答案如下,仅供参考
#include<iostream>#include<algorithm>#include<vector>using namespace std;#defineINF 1e+15#define EPS 1e-7inline int dcmp(double a, double b){if ((a - b) < -EPS) return -1;if ((a - b) > EPS) return 1;return 0;}struct Line{double k, b;double pstart, pend;Line(double x1, double y1, double x2, double y2){if (dcmp(x1, x2) == 0){k = INF;b = x1;pstart = min(y1, y2);pend = max(y1, y2);}else{k = (y2 - y1) / (x2 - x1);b = y1 - k * x1;pstart = min(x1, x2);pend = max(x1, x2);}}};bool comp(Line a, Line b){if (dcmp(a.k, b.k) != 0) return dcmp(a.k, b.k) < 0;if (dcmp(a.b, b.b) != 0) return dcmp(a.b, b.b) < 0;if (dcmp(a.pstart, b.pstart) != 0)return dcmp(a.pstart, b.pstart) < 0;if (dcmp(a.pend, b.pend) != 0)return dcmp(a.pend, b.pend) < 0;return false;}vector<Line> line;int n;int ans(){sort(line.begin(), line.end(), comp);int re = n;double maxreached = line[0].pend;for (int i = 1; i < n; i++){if (dcmp(line[i].k, line[i - 1].k) == 0 && dcmp(line[i].b, line[i - 1].b) == 0){if (dcmp(line[i].pstart, maxreached) <= 0) re--;maxreached = max(maxreached, line[i].pend);}else{maxreached = line[i].pend;}}return re;}int main(){double x1, x2, y1, y2;while (cin >> n && n != 0){for (int i = 0; i < n; i++){cin >> x1 >> y1 >> x2 >> y2;line.push_back(Line(x1, y1, x2, y2));}cout << ans() << endl;line.clear();}//system("pause");return 0;}
0 0
- sicily 1004之线段判断
- sicily 1802 线段树
- 计算几何之判断线段相交
- 计算几何之判断线段相交
- 计算几何之判断线段是否相交
- 计算几何之判断线段相交
- 数学之美,判断两个线段相交
- sicily 1800 线段树RMQ
- sicily 1136 山海经【线段树】
- sicily 1004
- sicily 1004
- Sicily 1802 Atomic Nucleus Investigation(线段树)
- sicily 1800 Sequence【线段树-RMQ】
- sicily 1156之约定俗成
- sicily 1063之迭代器
- 【编程之美】区间重合判断(线段树)
- 计算几何之判断两线段是否相交
- 计算几何之判断两线段是否相交
- cocos2d-x之图层
- C# -- 泛型(3)泛型的协变与逆变
- Spring(四)利用注解实现spring基本配置详解
- 数据库死锁检测语句
- 排序-java StringTokenizer
- sicily 1004之线段判断
- B-tree/B+tree/B*tree
- 【Android开发】网络通信之网页源码查看器
- Spring(五)spring之AOP底层大揭秘
- hdu1302
- JS创建表单并提交以及限制用户输入某一个字符
- SpringMVC Ajax请求时返回json中文字符串的乱码问题的解决方案
- dump analyze
- 朝花夕拾:Eclipse断点调试