CC37:穿点最多的直线
2024-10-18 04:16:09
题目
在二维平面上,有一些点,请找出经过点数最多的那条线。
给定一个点集vectorp和点集的大小n,没有两个点的横坐标相等的情况,请返回一个vector,代表经过点数最多的那条直线的斜率和截距。
解法
自己的想法是两个点计算斜率与截距,然后另写个函数判断剩下的点到这条直线的距离。但是仔细想想复杂度还是太高了,所以采用map存储的方式:
/*
struct Point {
int x;
int y;
Point() :
x(0), y(0) {
}
Point(int xx, int yy) {
x = xx;
y = yy;
}
};*/
class DenseLine {
public:
vector<double> getLine(vector<Point> p, int n) {
map<pair<double, double>, int > lines;
for(int i = 0; i < n; i++){
for(int j = i+1; j < n; j++){
++lines[calLine(p[i],p[j])];
}
}
auto it = lines.begin();
auto maxLine = it;
int max = 0;
while(it != lines.end()){
if(it->second > max) maxLine = it;
it++;
}
vector<double> res;
res.push_back(maxLine->first.first);
res.push_back(maxLine->first.second);
return res;
}
pair<double, double> calLine(Point p1,Point p2){
double k = (double)(p1.y - p2.y)/(double)(p1.x - p2.x);
double s = (double)p1.y - (double)k*p1.x;
return make_pair(k,s);
}
};
pair可以将两个值视为一个单元。容器类别map和multimap就是使用pairs来管理其健值/实值(key/value)的成对元素.
最新文章
- 浅析.NET的反射特性
- SparkStreaming运行出现 java.lang.NoClassDefFoundError: org/apache/htrace/Trace 错误
- Win7 64位 VS2013环境编译boost1_58_0
- Angularjs,WebAPI 搭建一个简易权限管理系统 —— Angularjs 前端主体结构(五)
- c语言作业
- PHP实现简单的学生信息管理系统(web版)
- 转载网易博客:整理各大网站让网站变灰的css代码
- poj2243
- 升级到 ExtJS 5的过程记录
- Firefox 备份
- 阿里云SLB出现502 Bad Gateway 错误排查解决方法
- PHP等值判断中,常量与变量在左在右的区别
- C# 利用SharpPcap实现网络包捕获嗅探
- C#语言————选择结构
- Dockerfile 收集
- BZOJ 3609: [Heoi2014]人人尽说江南好
- SOALog
- Django:如何给文章列表添加图片
- Asis CTF 2015-Car_Market
- Eclipse git pull 报Nothing to fetch 异常原因
热门文章
- 对于glut和freeglut的一点比较和在VS2013上的配置问题
- 分享知识-快乐自己:SpringBoot 使用注解API的方式定义启动端口号
- 分享知识-快乐自己:SpringMvc中 页面日期格式到后台的类型转换
- HihoCoder1673 : 01间隔矩阵([Offer收割]编程练习赛41)(单调队列)
- kettle及数据库导数_20160920
- Block Change Tracking (块改变跟踪)
- IHE-PIX 备注
- 47: error: undefined reference to `QWebView::QWebView(QWidget*)'
- 选择排序(java)
- (十七)Spring 集成Quartz