AcWing 平面切分

2024-02-29 20:50
文章标签 acwing 切分 平面

本文主要是介绍AcWing 平面切分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

1、思路怎么想?

(1)定义:

1)所有数据包括斜率和截距,用pair存储,

2)所有直线都是不重合的,所以用set存储,pair类型的set容器,

3)用一个pair去表示一个焦点,第一个参量是横坐标x,第二个参量是纵坐标y,

(2)原理:

初始化res 为 1 ,

在每条直线进来之后,先res++

再加上,新进来的直线,与已经存在的直线的焦点数,即为答案,

(3)注意:

输入的线条可能为重合线条,所以需要判重,

这里很巧妙,因为set容器不能插入重复的线,所以只需记住上一条线数量,再与新插入进来的线的数量,作比较,

2、代码怎么写?

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>using namespace std;typedef pair<double , double>Pdd; 
set<Pdd> line;//存储直线斜率和截距的set容器
Pdd iter;//表示两直线焦点 
int res = 1;void compute(double x ,double y)
{set<Pdd> points;//存储焦点//遍历所有已经输入的边for(set<Pdd>::iterator l = line.begin() ; l != line.end() ; l++){double a = l->first;double b = l->second;if(a != x)//相交必有焦点,焦点可重合,用set来存去重 {iter.first = (b - y) / (x - a);iter.second = iter.first * x - y;points.insert(iter);}	} res += points.size();
}int main()
{int n;scanf("%d", &n);while(n--){double k , b;scanf("%lf%lf", &k , &b);int m = line.size();line.insert(make_pair(k,b));//make_pair()可直接将k,b转化为一个pair if(m != line.size()){res++;compute(k , b);}}printf("%d" , res);return 0;
}

孙少平上井以后,如果是白天,他总会迫不急待地走出矿区,走向如火如霞的山野之中。噢,他现在看起来不像个煤矿工人,倒像个多愁善感的诗人!

                                                                ——《平凡的世界》

这篇关于AcWing 平面切分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/760032

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

【AcWing】851. 求最短路

spfa算法其实是对贝尔曼福特算法做一个优化。 贝尔曼福特算法会遍历所有边来更新,但是每一次迭代的话我不一定每条边都会更新,SPFA是对这个做优化。 如果说dist[b]在当前这次迭代想变小的话,那么一定是dist[a]变小了,只有a变小了,a的后继(b)才会变小。 用宽搜来做优化,用一个队列,队列里边存的就是所有变小了的结点(队列里存的是待更新的点)。 基本思路就是我更新过谁,我再拿

求空间直线与平面的交点

若直线不与平面平行,将存在交点。如下图所示,已知直线L过点m(m1,m2,m3),且方向向量为VL(v1,v2,v3),平面P过点n(n1,n2,n3),且法线方向向量为VP(vp1,vp2,vp3),求得直线与平面的交点O的坐标(x,y,z): 将直线方程写成参数方程形式,即有: x = m1+ v1 * t y = m2+ v2 * t

高斯平面直角坐标讲解,以及地理坐标转换高斯平面直角坐标

高斯平面直角坐标系(Gauss-Krüger 坐标系)是基于 高斯-克吕格投影 的一种常见的平面坐标系统,主要用于地理信息系统 (GIS)、测绘和工程等领域。该坐标系将地球表面的经纬度(地理坐标)通过一种投影方式转换为平面直角坐标,以便在二维平面中进行距离、面积和角度的计算。 一 投影原理 高斯平面直角坐标系使用的是 高斯-克吕格投影(Gauss-Krüger Projection),这是 横

【AcWing】852. spfa判断负环

#include<iostream>#include<algorithm>#include<cstring>#include<queue>using namespace std;const int N= 1e5+10;int n,m;int h[N],w[N],e[N],ne[N],idx;int dist[N],cnt[N];//cnt存最短路径的边数bool st[N];v

n条直线最多能划分出多少个平面?

N条直线,两两相交,其交点各不不同,则产生的交点数目为N个数中取2个数的组合; 同时,也只有这种情况下(两两相交,也交点不同),分割的平面数最多, 数目为: 2 + (N-1)(N+2)/2.  这里求最少平面数没有意义,因为最少平面数就是N+1, 即N条直线两两平行的时候,分割的平面最少。 举例: 1条直线分割平面数最多为2; a1 = 2 2条直线分割平面数最多为4;

【机械手控制】基于matlab 4-RPR平面机械手的可操作性、工作空间分析和路径跟踪【含Matlab源码 7422期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信或扫描文章底部QQ二维码。 🍎个人主页:Matlab凤凰涅槃 🏆代码获取方式:扫描文章底部QQ二维码 ⛳️座右铭:行百里者,半于九十。 更多Matlab路径规划仿真内容点击👇 ①Matlab路径规划(凤凰涅槃版) ⛳️关注微信公众号Matlab王者助手或Matlab海神之光,更多资源等你来!!

什么叫做 “沿着晶体平面偏析”

“沿着晶体平面偏析”指的是在晶体材料中,某些元素或原子优先聚集或沉积在特定的晶体平面上,而不是均匀地分布在整个晶体中。这种现象通常发生在合金、半导体或其他多元材料的制备和热处理过程中。 关键点解释: 晶体平面:晶体是由原子按照特定的空间排列构成的,晶体平面是沿着某个特定方向上的原子排列面。这些平面通常根据晶体的对称性和结构特点来定义,如金属材料的{111}或{100}晶面。 偏析:在材料科

简述CCS平面线性光源

光源在机器视觉系统中起着重要作用,不同环境、场景及应用合适光源都不一样,今天我们来看看LFX3-PT系列平面线性光源。它是最适合检测镜面物体的凹凸,外壳小巧的光源。备有根据检测条件可选的2种线间距。1mm型(型号末尾:A)、2mm型(型号末尾:B)。 特点: 1、将导光板表面的印刷图案从点状更改为线状,可对同轴光源难以检测出的镜面物体上,“不明显的凹凸”进行提取并实现成像。

手机拍照-平面画

平面画技巧小结 1.怎么构建平面画? 1.点 2.线 3.面 2.怎么构建点? 1.对比手法:大小 2.中央展示 3.对比:上点感觉轻,下点感觉稳定 3.怎么构建线? 1.直线–> 稳定感 2.斜线–> 运动感 3.折线–>分割感,锋芒毕露 4.弧线–>柔软 5.曲线 6.黄金分割线—>三分线,分割在三分之一处 7.引导线—>引向某处 8.放射线—>近大远小,汇聚中央 4.怎么构建面