Sicily.1004. I Conduit!
/*1004. I Conduit!题目大意:给出一堆线段,求出需要画出最少的直线就可覆盖全部线段即有一部分重叠的线段用一条直线代表即可。 思路:先对每条线段求出其斜率k和截距b(如果没有截距,则用无限大代表)然后记录每条线段的起始位置(如果无斜率则为y坐标的较小的那个,如果有斜率,则为x坐标较小的那个),结束位置则取较大的那个。然后把线段数组先按k,后按b,最后按起始位置start从小到大排序排好序后,保证了同一直线上的线段在同一个区域内。然后先取出第一条线段的结束位置maxEnd,然后依次往后遍历,发现k和b相等的,即说明是同一条直线,就比较该线段的其实位置start与maxEnd的大小,如果是start在maxEnd前面,说明重叠,需要画的线段数num--,然后更新maxEnd。如果发现不重叠,就更新maxEnd
*/
#include<iostream>
#include<stdlib.h>
#include<algorithm>
using namespace std;
#define INF 1e+15
#define EPS 1e-7
int cmp(double x1, double x2){if(x1 - x2 < -EPS) return -1;if(x1 - x2 > EPS)return 1;return 0;
}struct Line{double k;double b;double start, end;Line(){}Line(double x1, double y1, double x2, double y2 ){if(cmp(x1, x2) == 0){k = INF;b = x1;start = min(y1, y2);end = max(y1, y2); }else{k = (y1 - y2)/(x1 - x2);b = y1 - k * x1;start = min(x1, x2);end = max(x1, x2); } }
};bool cmpLine(Line a, Line b){if(cmp(a.k, b.k) != 0)return cmp(a.k,b.k ) < 0;if(cmp(a.b, b.b) != 0)return cmp(a.b,b.b ) < 0; return cmp(a.start, b.start) < 0;}
int n;
Line line[10000];int main()
{while(cin >> n && n!=0){for(int i=0; i<n; i++) {double startX , startY, endX, endY;cin >> startX >> startY >> endX >> endY;line[i] = Line(startX, startY, endX, endY);}sort(line, line+n, cmpLine);int num = n;double maxEnd = line[0].end;for(int i=1; i<n; i++){ if(cmp(line[i].k, line[i-1].k) == 0 && cmp(line[i].b, line[i-1].b) == 0){if(cmp(line[i].start, maxEnd)<= 0 )num--;maxEnd = max(maxEnd, line[i].end); }elsemaxEnd = line[i].end; }cout << num << endl;} system("pause");return 0;
}
Sicily.1004. I Conduit!相关推荐
- sicily 1004 I Conduit!
2019独角兽企业重金招聘Python工程师标准>>> Description Irv Kenneth Diggit works for a company that excavat ...
- 【ACM】杭电OJ 1004
题目链接:杭电OJ 1004 运行环境:Dev-C++ 5.11 思路: 先把先把num数组全部赋值为1:第一个颜色单独输入,从第二个开始,需要与前面的进行比较,如果前面有相同的颜色,则在目前的nu ...
- 百度之星2014资格赛 1004 - Labyrinth
先上题目: Labyrinth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- Letters比赛第六场1004 Unit Fraction Partition解题报告
1004 Unit Fraction Partition(POJ 1980) 解题思路:DFS + 剪枝.这题的剪枝条件还是比较严格的,很容易超时,我想到的需要剪枝的情况有以下几点:①前几项的和超过了 ...
- PAT甲级1004 Counting Leaves (30分):[C++题解]树、邻接表存储树、dfs遍历树
文章目录 题目分析 题目链接 题目分析 题意重述:一棵树,求每一层的叶子节点数目. 分析 构造树,使用邻接表来存(相当于存储有向图). 需要一个头结点数组h[N],然后每个头节点往外形成一个单链表e[ ...
- lightoj 1004 dp:数字三角形
题目链接:http://lightoj.com/volume_showproblem.php?problem=1004 #include <cstdio> #include <cst ...
- 题目 1004: [递归]母牛的故事
题目 1004: [递归]母牛的故事 idea 1 2 3 4 6 9 13 第4年母牛的数量=第1年母牛的数量+第3年母牛的数量 第5年母牛的数量=第2年母牛的数量+第4年母牛的数量 第6年母牛的数 ...
- leetcode 485,487,1004. Max Consecutive Ones I ,II, III(最大连续1的个数问题合集)
485. Max Consecutive Ones https://leetcode.com/problems/max-consecutive-ones/ easy 题,思路不说了,直接上代码. cl ...
- 【BZOJ】1004: [HNOI2008]Cards(置换群+polya+burnside)
http://www.lydsy.com/JudgeOnline/problem.php?id=1004 学习了下polya计数和burnside引理,最好的资料就是:<Pólya 计数法的应用 ...
- 百炼OJ - 1004 - 财务管理
题目链接:http://bailian.openjudge.cn/practice/1004/ 思路 求和取平均... #include <stdio.h>int main() {floa ...
最新文章
- ATL的GUI程序设计(3)
- 神奇的FireFox
- Jvm 系列(八):Jvm 知识点总览
- java,阳历转阴历
- NavigationView的使用
- Spring Boot和Swagger UI
- java ip输入框_JavaScript实现IP地址的输入框方式
- php 鼠标点击图片放大,css3如何实现鼠标放上图片放大?(附代码)
- 科技计划项目数据管理过程模型
- 微信独立精彩互换抢红包系统源码ThinkPHP开源版
- 响应式布局技术:App如何适配不同尺寸的设备
- Github-Git for windowsTortoiseGit下载与安装
- 3个人的java 实验_20165104-JAVA第三次实验
- 如何保持交互的可见性
- jspSmartUpload 组件的使用方法
- NeatUpload的安装使用 文件上传。可传大文件。
- python与sql的区别_2020年入门数据分析选择Python还是SQL?七个常用操作对比!
- maven文件彻底修改名字 Java文件修改名字
- JSONObject.parseObject()
- java版商城之一件代发设置 Spring Cloud+SpringBoot+mybatis+uniapp b2b2c o2o 多商家入驻商城 直播带货商城 电子商务
热门文章
- 阅读笔记-2022-Enhancing Sequential Recommendation with Graph Contrastive Learning
- 强烈推荐纪录片——《互联网之子》
- 什么是互联网营销?看一篇这就够了
- c语言 1为真还是0为真,C语言中逻辑表达式和关系表达式的值为真时,到底是用非0的任何数表示还是只能用1来表示?...
- URAL1389. Roadworks(dp)
- 国产BI报表工具中低调的优秀“模范生”——思迈特软件Smartbi
- meta http-equiv 属性 详解
- vue基于file-saver处理二进制文件流,导出文件
- 什么句子可以暗示自己恋爱了?
- 李飞飞:我怎样走上 AI 研究之路的?