倾斜的线

(slope.cpp)

【问题描述】

给定两个正整数PQ。在二维平面上有n个整点。现在请你找到一对点使得经过它们的直线的斜率在数值上最接近P/Q(即这条直线的斜率与P/Q的差最小),请输出经过它们直线的斜率p/q。如果有两组点的斜率的接近程度相同,请输出较小的斜率。保证答案的p/q> 0,即输出的pq都是正整数。

【输入格式】

输入文件名为slope.in

第一行三个正整数n P Q

接下来n行每行两个正整数x y表示一个点的坐标。保证不存在x坐标相同或者y坐标相同的点(即斜率不会为无穷大与0)。

【输出格式】

输出文件名为slope.out

输出仅一行,格式为p/q,表示最接近的斜率,其中pq都是正整数。

【样例输入与输出】

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 几何相关推荐

  1. Java黑皮书课后题第10章:*10.11(几何:Circle2D类)定义Circle2D类

    *10.11(几何:Circle2D类)定义Circle2D类 题目 程序 代码 Test11.java Test11_Circle2D.java 运行实例 关于UML 题目 程序 Test11.ja ...

  2. 11 一道几何题,众所周知,坠帅坠可爱的ZZZ学长是计算几何的大师,这次他遇到了这样一个题目。 给定3个点a,b,c 找到一个点,使得如果我们把平面绕着这个点旋转一定的角度,a可以落在b原来的位置,

    11 一道几何题 众所周知,坠帅坠可爱的ZZZ学长是计算几何的大师,这次他遇到了这样一个题目. 给定3个点a,b,c. 找到一个点,使得如果我们把平面绕着这个点旋转一定的角度,a可以落在b原来的位置, ...

  3. Arcgis Javascript那些事儿(十二)——geometry service几何服务

    1.引言 什么是几何服务(GeometryService)?从字面意义上来说是和几何(Geometry)相关的服务,具体一点讲我们可以用这个类实现一些简单的图形操作.例如: 测量直线的距离 形状的缓冲 ...

  4. 数字图像几何变化matlab,【新书推荐】数字图像处理——使用MATLAB分析与实现

    原标题:[新书推荐]数字图像处理--使用MATLAB分析与实现 数字图像处理是现代信息处理的研究热点.教材基于大学教学特点.目的编写,介绍数字图像处理的基本原理.算法分析和实现.章节内容由浅入深,层次 ...

  5. 读书笔记2013第13本:《怎样解题》

    <怎样解题>这本书是在看<编程大师访谈录>(中文版第12页)这本书时无意发现的,一个编程大师推荐这本书来指导编程设计,google到这本书后粗略地翻看了一遍,发现是一本教学生如 ...

  6. 第30本:《怎样解题》

    第30本:<怎样解题> <怎样解题>这本书是在看<编程大师访谈录>(中文版第12页)这本书时无意发现的, 一个编程大师推荐这本书来指导编程设计,google到这本书 ...

  7. matlab图像处理函数

    下列表格中除了个别函数外,其余函数都是图像处理工具箱提供的关于图像处理的函数,现摘录到此以备查找. 表1 图像显示 函数名 功能说明 函数名 功能说明 colorbar 颜色条显示 montage 按 ...

  8. matlab 图像处理 新浪 应变,[转载]Matlab图像处理小结

    经常做做图像处理的东西,时间长了,有些函数就忘了,看到网上有人总结,收藏了. 1. 图像和图像数据 缺省情况下,MATLAB将图像中的数据存储为双精度类型(double),64位浮点数,所需存储量很大 ...

  9. (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 ...

最新文章

  1. Blender和Substance Painter复古相机创作学习教程
  2. C#.net Winform获取文件路径
  3. BAT大佬给的Python神器,内附资源
  4. 字典排序 python3_这10个字典操作你必须知道
  5. [面试] 删除多余的数组内容
  6. UML用例图讲解及画法
  7. asp内乱码,注意不是ajax
  8. CHD-5.3.6集群上sqoop安装
  9. xyplorer保存设置失败_XYplorer有哪些独特的强大之处?又可以在哪些方面替代,或者超越total commander?...
  10. CV学习:李宏毅2021机器学习(2)
  11. 环路分析仪Bode100
  12. 大数据研发能力模型(面试准备)
  13. python 读取传入参数
  14. proteus仿真里面的LCD1602液晶屏初始化
  15. 基于FPGA的FFT
  16. 体系结构第1章—基本概念
  17. Sms开源短信及消息转发器,不仅只转发短信,备用机必备神器
  18. DVWA 反射型XSS XSS(Reflected)题解
  19. 数据压缩作业2.1 多媒体文件分析——TGA文件
  20. Verge3D场景数据压缩方式

热门文章

  1. Linux中如何杀掉僵尸进程
  2. JAVA try...catch...finally中的执行顺序和return语句
  3. 常用事件方法及技巧(二) -- MouseEvent(鼠标事件)
  4. ajax(Tibco) 与 SQL server 2005(5)
  5. 移植uboot第四步:设置NAND启动
  6. 8 Django 模型层(2)
  7. java_2018_Day7_静态static
  8. C++深入理解虚函数
  9. 转:selenium webdriver+python基本操作
  10. CVPR 2014 ObjectnessBING 原文翻译