正题


题目大意

有nnn个点,将两个点连成线,求斜率最接近PQ\frac{P}{Q}QP​的线。


解题思路

我们有一个结论:若我们对于每一个点做一条斜率为PQ\frac{P}{Q}QP​的线,然后按截距排序,然后答案必定是相邻的点。

证明:

我们在三条线上分别做点A,B,CA,B,CA,B,C,我们用tan(A,B)tan(A,B)tan(A,B)表示直线A,BA,BA,B的斜率
我们现在要证明tan(A,C)tan(A,C)tan(A,C)或tan(C,B)tan(C,B)tan(C,B)必定比tan(A,B)tan(A,B)tan(A,B)更接近PQ\frac{P}{Q}QP​。
我们做AD⊥l1AD\perp l1AD⊥l1,做BE⊥l2BE\perp l2BE⊥l2,然后我们分类讨论。

  1. CCC点在ADADAD线的左边,此时我们发现CCC和BBB的距离显然比AAA和BBB的要远,所以斜率更接近。
  2. CCC点在BEBEBE线的右边,与上面同理
  3. CCC点在ADADAD的右边BEBEBE的左边此时我们有tan(AC)>PQ,tan(CB)>PQ,tan(AB)>PQtan(AC)>\frac{P}{Q},tan(CB)>\frac{P}{Q},tan(AB)>\frac{P}{Q}tan(AC)>QP​,tan(CB)>QP​,tan(AB)>QP​,然后因为这个三角形中必定有一条边的斜率大于ABABAB,一条小于ABABAB,所以我们取叫小的那条就是更接近的。

那我们现在证明了三条时的情况,扩展到多条时是同理的。

证明完毕

所以我们可以对于每条线按照截距排序,然后只计算相邻的边即可。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const ll N=2e5+10;
struct node{ll a,b;
}ans,get;
struct point{ll x,y;double z;
}a[N];
ll n,x[N],y[N];
double operator-(const node &x,const node &y)
{return fabs(1.0*x.a/x.b-1.0*y.a/y.b);}
bool operator<(const node &x,const node &y)
{return 1.0*x.a/x.b<1.0*y.a/y.b;}
bool cMp(point x,point y)
{return x.z<y.z;}
int main()
{//freopen("slope.in","r",stdin);//freopen("slope.out","w",stdout);scanf("%lld%lld%lld",&n,&get.a,&get.b);for(ll i=1;i<=n;i++){scanf("%lld%lld",&a[i].x,&a[i].y);a[i].z=a[i].y*1.0-(double)(a[i].x*1.0*get.a*1.0/get.b);}sort(a+1,a+1+n,cMp);ans=(node){abs(a[2].y-a[1].y),abs(a[1].x-a[2].x)};for(ll i=3;i<=n;i++){node now=(node){abs(a[i].y-a[i-1].y),abs(a[i].x-a[i-1].x)};if((now-get)==(ans-get)&&now<ans) ans=now;else if(now-get<ans-get) ans=now;}ll q=ans.a,p=ans.b,d=__gcd(q,p);printf("%lld/%lld",q/d,p/d);
}

jzoj6290-倾斜的线【计算几何,贪心】相关推荐

  1. 【BZOJ-1127】KUP 悬线法 + 贪心

    1127: [POI2008]KUP Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special Judge Submit: 317  Solved: 1 ...

  2. JZOJ 6290. 倾斜的线

    题目 Description Input Output Sample Input 6 15698 17433 112412868 636515040 122123982 526131695 58758 ...

  3. 2018北京网络赛 HihoCoder - 1835 K-Dimensional Foil II 计算几何 贪心 二分

    题目链接:https://vjudge.net/problem/HihoCoder-1835 题解:首先我们应该能想到到达图形的距离最近那肯定是垂直过去,也就是坐标变为(x1 - k, x2 - k, ...

  4. 欢乐纪中A组赛【2019.8.17】

    前言 前几天题目没改完(好难QvQQvQQvQ),然后这几天ZZYZZYZZY和WHFWHFWHF去广州二中了 然后我是菜鸡,今天暴力写挂了QAQQAQQAQ,T2T2T2少判断了个东西少了80808 ...

  5. (转载)散射线对X线照片质量的影响

    原文地址 许洪兴 [中图分类号] R81 [文献标识码] B [文章编号] 1000-0313(2000)04-0284-02 影响X线照片质量的因素很多,散射线也是较为重要因素之一.在拍摄一张X光片 ...

  6. Canvas中任意波浪线的绘制

    最近接触一个墨水屏的项目,有个需求就是会进行一些标记绘制,类似直线.自由曲线.波浪线等,所以就涉及到波浪线如何绘制. 本篇文章并不会告诉你在 Android 中如何利用 Canvas 去绘制线条. 水 ...

  7. 股票学习-量柱和k线-第八天

    量线的三个规律 量线:是以量柱为基础的画线,他是量柱和价柱双向合一的量的价格线,就是在有特殊量柱对应点位(或价位)上生长出来的有特殊意义的攻防线 从形式上看,量线是相关量柱所对应的价位(或点位)的连线 ...

  8. 【纪中受难记】——Day17:本来能AK

    (标题妄想). 95/0/0 第二题很水,后来花5分钟切了. 3503. 粉刷(paint) (Standard IO) Time Limits: 1000 ms  Memory Limits: 13 ...

  9. c++ege为什么直线画不出来_今天让我们来练习画一款椭圆茶几

    可能有同学要提问了,这款茶几是椭圆的吗?其实呢,是画啥君特地把尺寸改成现在这个的... 今天呢主要就是想介绍一下"EL"椭圆的画法,然后这节还会有一个关于椭圆线的特别知识点. ↑ ...

最新文章

  1. Car-eye-http-flv-module 实现nginx-rtmp-mudule HTTP方式的FLV直播功能
  2. 拉勾网《32个Java面试必考点》学习笔记之二------操作系统与网络知识
  3. 【论文解读】TOOD:任务对齐的一阶段物体检测器
  4. PAT (Basic Level) 1080 MOOC期终成绩(模拟+stl)
  5. Java Spring MVC model学习
  6. 8个最高效的Python爬虫框架,你用过几个?
  7. linux内存管理之RSS和VSZ的区别
  8. javascript 库_您应该在2020年尝试的10个很棒JavaScript库
  9. JavaScript的call,apply和bind方法之间的区别
  10. 解决mysql“Access denied for user 'root'@'localhost'”
  11. python降噪突出人声_当石墨烯动圈遇上主动式降噪,dyplay 城市旅行者2.0开启纯享音乐...
  12. LINUX下载编译zlib
  13. tcpip详解卷一arp 地址解析协议
  14. 计算方法 matlab,计算方法及其MATLAB实现
  15. 爬虫-Scrapy(二) 爬取糗百笑话-单页
  16. vue地址选择插件V - Distpicker
  17. html显示doc内容,doc文件怎么打开?doc是什么文件?
  18. Share Your Music - HTML5 Music Web App
  19. 什么是私域流量?如何运营?
  20. VLAN的原理及配置

热门文章

  1. 在google play开放平台上closed texting如何删除_“爷青回”!如何抢先体验《英雄联盟》手游?这份攻略送给你...
  2. 直接裂开!京东二面被问SpringBoot整合MongoDB,我不会啊
  3. 实现贝叶斯分类器_机器学习实战项目-朴素贝叶斯
  4. 查询2021抚顺高考成绩,2021年抚顺高考状元是谁分数多少分,历年抚顺高考状元名单...
  5. 华科计算机课程设计,华中科大操作系统课程设计报告(附源码).doc
  6. python实例方法、类方法、静态方法的区别_Python 实例方法、类方法、静态方法的区别与作用...
  7. python变量的作用_python 变量的作用范围
  8. java获取下周一整周的日期_获取Java中日期范围内的所有星期五
  9. 问题 B: 数塔问题
  10. [剑指offer]面试题8:旋转数组的最小数字