11.02T1 几何
倾斜的线
(slope.cpp)
【问题描述】
给定两个正整数P和Q。在二维平面上有n个整点。现在请你找到一对点使得经过它们的直线的斜率在数值上最接近P/Q(即这条直线的斜率与P/Q的差最小),请输出经过它们直线的斜率p/q。如果有两组点的斜率的接近程度相同,请输出较小的斜率。保证答案的p/q> 0,即输出的p和q都是正整数。
【输入格式】
输入文件名为slope.in。
第一行三个正整数n P Q。
接下来n行每行两个正整数x y表示一个点的坐标。保证不存在x坐标相同或者y坐标相同的点(即斜率不会为无穷大与0)。
【输出格式】
输出文件名为slope.out。
输出仅一行,格式为p/q,表示最接近的斜率,其中p和q都是正整数。
【样例输入与输出】
example_slope1.in |
example_slope1.out |
6 15698 17433 112412868 636515040 122123982 526131695 58758943 343718480 447544052 640491230 162809501 315494932 870543506 895723090 |
193409386/235911335 |
更多样例请见example/slope/目录。
【数据范围】
对于1~10号测试点(50%):n<=1000。
对于所有测试点(100%):n<=400000。
把所有点按照P/Q斜率投射到y轴上排序,可以证明相邻的点对应的线段一定有一条是最优解,因为不相邻的点与给定的斜率夹角比相邻的大
code:
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 #define N 1000006 6 using namespace std; 7 struct node{ 8 long double x,y,w; 9 }e[N]; 10 bool cmp(const node&a,const node&b){ 11 return a.w<b.w; 12 } 13 long double getk(int i,int j){ 14 return (e[i].y-e[j].y)/(e[i].x-e[j].x); 15 } 16 int gcd(int a,int b){ 17 if(a<b)swap(a,b); 18 while(a=a%b)swap(a,b); 19 return b; 20 } 21 int main(){ 22 int n; 23 long double P,Q; 24 cin>>n>>P>>Q; 25 for(int i=1;i<=n;i++){ 26 cin>>e[i].x>>e[i].y; 27 e[i].w=e[i].y-e[i].x*P/Q; 28 } 29 sort(e+1,e+n+1,cmp); 30 long double delta=9999999.0; 31 int now1,now2; 32 for(int i=1;i<n;i++){ 33 if(fabs(getk(i,i+1)-P/Q)<delta){ 34 now1=i,now2=i+1; 35 delta=fabs(getk(i,i+1)-P/Q); 36 } 37 else if(fabs(getk(i,i+1)-P/Q)==delta){ 38 if(getk(i,i+1)-P/Q<0){ 39 now1=i,now2=i+1; 40 } 41 } 42 } 43 int deltax=e[now1].x-e[now2].x,deltay=e[now1].y-e[now2].y; 44 if(deltax<0)deltax=-deltax,deltay=-deltay; 45 int GCD=gcd(abs(deltax),abs(deltay)); 46 cout<<deltay/GCD<<"/"<<deltax/GCD; 47 return 0; 48 }
over
转载于:https://www.cnblogs.com/saionjisekai/p/9898487.html
11.02T1 几何相关推荐
- Java黑皮书课后题第10章:*10.11(几何:Circle2D类)定义Circle2D类
*10.11(几何:Circle2D类)定义Circle2D类 题目 程序 代码 Test11.java Test11_Circle2D.java 运行实例 关于UML 题目 程序 Test11.ja ...
- 11 一道几何题,众所周知,坠帅坠可爱的ZZZ学长是计算几何的大师,这次他遇到了这样一个题目。 给定3个点a,b,c 找到一个点,使得如果我们把平面绕着这个点旋转一定的角度,a可以落在b原来的位置,
11 一道几何题 众所周知,坠帅坠可爱的ZZZ学长是计算几何的大师,这次他遇到了这样一个题目. 给定3个点a,b,c. 找到一个点,使得如果我们把平面绕着这个点旋转一定的角度,a可以落在b原来的位置, ...
- Arcgis Javascript那些事儿(十二)——geometry service几何服务
1.引言 什么是几何服务(GeometryService)?从字面意义上来说是和几何(Geometry)相关的服务,具体一点讲我们可以用这个类实现一些简单的图形操作.例如: 测量直线的距离 形状的缓冲 ...
- 数字图像几何变化matlab,【新书推荐】数字图像处理——使用MATLAB分析与实现
原标题:[新书推荐]数字图像处理--使用MATLAB分析与实现 数字图像处理是现代信息处理的研究热点.教材基于大学教学特点.目的编写,介绍数字图像处理的基本原理.算法分析和实现.章节内容由浅入深,层次 ...
- 读书笔记2013第13本:《怎样解题》
<怎样解题>这本书是在看<编程大师访谈录>(中文版第12页)这本书时无意发现的,一个编程大师推荐这本书来指导编程设计,google到这本书后粗略地翻看了一遍,发现是一本教学生如 ...
- 第30本:《怎样解题》
第30本:<怎样解题> <怎样解题>这本书是在看<编程大师访谈录>(中文版第12页)这本书时无意发现的, 一个编程大师推荐这本书来指导编程设计,google到这本书 ...
- matlab图像处理函数
下列表格中除了个别函数外,其余函数都是图像处理工具箱提供的关于图像处理的函数,现摘录到此以备查找. 表1 图像显示 函数名 功能说明 函数名 功能说明 colorbar 颜色条显示 montage 按 ...
- matlab 图像处理 新浪 应变,[转载]Matlab图像处理小结
经常做做图像处理的东西,时间长了,有些函数就忘了,看到网上有人总结,收藏了. 1. 图像和图像数据 缺省情况下,MATLAB将图像中的数据存储为双精度类型(double),64位浮点数,所需存储量很大 ...
- (5)通过输入参数(测量数据)构建二维体模型(01)
1.参数 vector<double> d = { 2,1,1,3, 1,1,1,5, 3,2,3,5, 7,5 }; 2.代码 #pragma once #include "I ...
最新文章
- Blender和Substance Painter复古相机创作学习教程
- C#.net Winform获取文件路径
- BAT大佬给的Python神器,内附资源
- 字典排序 python3_这10个字典操作你必须知道
- [面试] 删除多余的数组内容
- UML用例图讲解及画法
- asp内乱码,注意不是ajax
- CHD-5.3.6集群上sqoop安装
- xyplorer保存设置失败_XYplorer有哪些独特的强大之处?又可以在哪些方面替代,或者超越total commander?...
- CV学习:李宏毅2021机器学习(2)
- 环路分析仪Bode100
- 大数据研发能力模型(面试准备)
- python 读取传入参数
- proteus仿真里面的LCD1602液晶屏初始化
- 基于FPGA的FFT
- 体系结构第1章—基本概念
- Sms开源短信及消息转发器,不仅只转发短信,备用机必备神器
- DVWA 反射型XSS XSS(Reflected)题解
- 数据压缩作业2.1 多媒体文件分析——TGA文件
- Verge3D场景数据压缩方式
热门文章
- Linux中如何杀掉僵尸进程
- JAVA try...catch...finally中的执行顺序和return语句
- 常用事件方法及技巧(二) -- MouseEvent(鼠标事件)
- ajax(Tibco) 与 SQL server 2005(5)
- 移植uboot第四步:设置NAND启动
- 8 Django 模型层(2)
- java_2018_Day7_静态static
- C++深入理解虚函数
- 转:selenium webdriver+python基本操作
- CVPR 2014 ObjectnessBING 原文翻译