计蒜客 第四场 C 商汤科技的行人检测(中等)平面几何好题
商汤科技近日推出的 SenseVideo 能够对视频监控中的对象进行识别与分析,包括行人检测等。在行人检测问题中,最重要的就是对行人移动的检测。由于往往是在视频监控数据中检测行人,我们将图像上的行人抽象为二维平面上若干个的点。那么,行人的移动就相当于二维平面上的变换。
在这道题中,我们将行人的移动过程抽象为 旋转、伸缩、平移,有 44 个 移动参数:\theta, scale, d_x,d_yθ,scale,dx,dy。每次行人的移动过程会将行人对应的 nn 个点全部依次应用旋转、伸缩、平移,对于平移前的点 (x, y)(x,y),进行每种操作后的坐标如下:
- 旋转后的坐标为:(x \cos\theta - y \sin\theta, x \sin\theta + y \cos\theta)(xcosθ−ysinθ,xsinθ+ycosθ);
- 伸缩后的坐标为:(x \times scale, y \times scale)(x×scale,y×scale);
- 平移后的坐标为:(x + d_x, y + d_y)(x+dx,y+dy)。
由于行人移动的特殊性,我们可以确保 0 < scale \le 100<scale≤10。和简单版本不同的是,这道题处理的坐标为浮点数而非整数。
很显然,通过变换前后的正确坐标,很容易算出行人的移动参数,但问题没有这么简单。由于行人实际的移动并不会完全按照我们预想的方式进行,因此,会有一部分变换后的坐标结果不正确,但可以确保 结果不正确的坐标数量严格不超过一半。
你现在作为商汤科技的实习生,接手了这个有趣的挑战:算出行人的移动参数。如果不存在一组合法的移动参数,则随意输出一组参数;如果有多种合法的移动参数,输出其中任意一组合法的即可。
输入格式
第一行输入一个整数 nn,表示行人抽象出的点数。
接下来 nn 行,每行 44 个 浮点数。前两个数表示平移前的坐标,后两个数表示平移后的坐标。
坐标范围在 -10^9−109 到 10^9109 之间,输入的坐标都保留到 66 位小数。
对于中等版本,1 \le n \le 5001≤n≤500;
对于困难版本,1 \le n \le 10^{5}1≤n≤105。
输出格式
第一行输出一个浮点数 \thetaθ,第二行输出一个浮点数 scalescale,第三行输出两个浮点数 d_x,d_ydx,dy。
建议输出保留到 1010 位小数或以上。我们会按照 10^{-3}10−3 的精度判断是否有超过一半的点变换后的坐标重合。
样例输入
5
0 0 -1 1
0 1 -2 1
1 0 -1 2
1 1 0 0
2 1 1 0
样例输出
1.5707963268
1
-1 1
解题思路:
n^2枚举点对,然后根据这对点算出四个参数,然后重新跑一遍点,判断有多少个点的变换符合这个四个参数,超过一半就正确直接输出。
具体的算法。
scale 两个点之间的距离跟旋转和平移都没有关系,然后根据相似三角形可以知道两点之间距离的变化就是scale。
坐标旋转量θ:旋转坐标前两个点形成的直线向量A,和旋转坐标后的两个点形成的直线向量B,A,B的夹角就是θ,可以证明,这里就不说了,然后用一下公式cosθ=A*B/(|A|*|B|), 就能算出角度了。
dx,dy用scale和θ算出的坐标和题目给的坐标一减就出来了
。。真强。。。这位大佬高中数学肯定贼好。。数学弱只能感受一波了,原来利用任意两个点 本来->变化后,可以求出这么多东西,可以求出伸缩量,利用旧的两点距离和新的亮点距离成比例就好,还有就是角度,利用旧的线的旋转角度后变成新的线的角度(。。强。。然后就可以利用 A*B/(|A|*|B|) 求出角度了。。涨知识。。虽然不知道会记住多少。。加油加油)
A,B 都为两点相减。
坑点:一定要输出10位以后,scanf一定要%lf 输出%lf 或者 %.11f 都可以
上面的证明我不会,问题其实还没有解决
原问题是:(x1,y1)=>(x2,y2),当然(x1,y1)依次经过旋转缩放和平移得到了(x2,y2)
如何求出旋转量theta,缩放比例和平移的横纵坐标呢
这.....想了很久,没想出来
但是题解是这么搞的,枚举变换的两对点对,根据每个点对变换前的点连线,和变换后的两个点连线,然后根据余弦定理算出角度,顺便算出缩放比例
然后返回去算下平移变化....
也就是说,相当于增加了方程变量的个数,它的意思是说,角度theta是可以暴力枚举的,如果你能想到上面的证明
于是我发现我的推理能力还是太弱了
计蒜客 第四场 C 商汤科技的行人检测(中等)平面几何好题的更多相关文章
- 计蒜客-第五场初赛-第二题 UCloud 的安全秘钥(简单)
每个 UCloud 用户会构造一个由数字序列组成的秘钥,用于对服务器进行各种操作.作为一家安全可信的云计算平台,秘钥的安全性至关重要.因此,UCloud 每年会对用户的秘钥进行安全性评估,具体的评估方 ...
- 计蒜客第五场 UCloud 的安全秘钥(中等) (尺取游标法
每个 UCloud 用户会构造一个由数字序列组成的秘钥,用于对服务器进行各种操作.作为一家安全可信的云计算平台,秘钥的安全性至关重要.因此,UCloud 每年会对用户的秘钥进行安全性评估,具体的评估方 ...
- 计蒜客 31451 - Ka Chang - [DFS序+树状数组][2018ICPC沈阳网络预赛J题]
题目链接:https://nanti.jisuanke.com/t/31451 Given a rooted tree ( the root is node $1$ ) of $N$ nodes. I ...
- 计蒜客 31436 - 提高水平 - [状压DP]
题目链接:https://nanti.jisuanke.com/t/31436 作为一名车手,为了提高自身的姿势水平,平时的练习是必不可少的.小 J 每天的训练包含 $N$ 个训练项目,他会按照某个顺 ...
- 2019计蒜客信息学提高组赛前膜你赛 #2(TooYoung,TooSimple,Sometimes Naive
计蒜客\(2019CSP\)比赛第二场 巧妙爆零这场比赛(我连背包都不会了\(QWQ\) \(T1\) \(Too\) \(Young\) 大学选课真的是一件很苦恼的事呢! \(Marco\):&qu ...
- 计蒜客模拟赛5 D2T1 成绩统计
又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的). 不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了. ...
- 计蒜客 31434 - 广场车神 - [DP+前缀和]
题目链接:https://nanti.jisuanke.com/t/31434 小 D 是一位著名的车手,他热衷于在广场上飙车.每年儿童节过后,小 D 都会在广场上举行一场别样的车技大赛. 小 D 所 ...
- 计蒜客 28449.算个欧拉函数给大家助助兴-大数的因子个数 (HDU5649.DZY Loves Sorting) ( ACM训练联盟周赛 G)
ACM训练联盟周赛 这一场有几个数据结构的题,但是自己太菜,不会树套树,带插入的区间第K小-替罪羊套函数式线段树, 先立个flag,BZOJ3065: 带插入区间K小值 计蒜客 Zeratul与Xor ...
- 计蒜客 作弊揭发者(string的应用)
鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...
随机推荐
- 善用tempfile库创建python进程中的临时文件
技术背景 临时文件在python项目中时常会被使用到,其作用在于随机化的创建不重名的文件,路径一般都是放在Linux系统下的/tmp目录.如果项目中并不需要持久化的存储一个文件,就可以采用临时文件的形 ...
- Java语法糖详解
语法糖 语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更 ...
- PE节表
- Kubernetes TensorFlow 默认 特定 集群管理器 虚拟化技术
Our goal is to foster an ecosystem of components and tools that relieve the burden of running applic ...
- 进程的创建-multiprocessing
multiprocessing模块就是跨平台版本的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情 1. 2个while循环一起执行 # ...
- 济南学习D3T1__线性筛和阶乘质因数分解
[问题描述] 从1− N中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数最大可能是多少. [输入格式] 第一行一个数字N. [输出格式] 一行,一个整数代表答案对100000007取模之后的 ...
- 客户端,Scala:Spark查询Phoenix
客户端,Scala:Spark查询Phoenix 1.pom.xml 2.配置文件 2.1config.properties 2.2MyConfig 3.entity实体(与phoenix中的tabl ...
- Linux环境Hive安装配置及使用
Linux环境Hive安装配置及使用 一.Hive Hive环境前提 二.Hive架构原理解析 三.Hive-1.2.2单机安装流程 (1) 解压apache-hive-1.2.2-bin.tar.g ...
- 网络编程(socket简介)
socket简介 Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中 ...
- msf+cobaltstrike联动(一):把msf的session发给cobaltstrike
前提:MFS已经获取到session,可以进入metepreter,现在需要使用cobaltstrike进行图形化管理或团队协作. cobaltstrike起一个beacon监听,如使用:window ...