首页 > 其他分享 >C0328 【1005 C组】模拟测试 斜率 题解

C0328 【1005 C组】模拟测试 斜率 题解

时间:2023-12-19 12:11:06浏览次数:30  
标签:cos frac 题解 times beta C0328 alpha 1005 sin

原题链接:斜率

题意

在一个平面直角坐标系中,给定 \(n\) 个点的横纵坐标,求出哪两个点所构成的连线的斜率最接近 \(\frac{P}{Q}\)。

数据范围:\(n \le 1000000\)。

思路

显然这是一道数学题,不能直接暴力去找答案。

首先我们可以弱化一下题目,求出斜率最接近 \(y=0\) 即 \(x\) 轴的两点。那我们其实要求的就是斜率的绝对值最小的两点。那么我们可以直接将这 \(n\) 个点按照横坐标的大小排序,然后答案就是组成的线段中斜率的绝对值最小的相邻的两个点。为什么答案一定在相邻两个点中呢?因为如下图所示,对于每一个 \(\bigtriangleup ABC\),都满足性质:\(k_{ac}> \min(k_{ab},k_{bc})\)。

证明:

设三角形三个点的坐标分别为 \(A(a,b),B(e,f),C(c,d)\)。

我们可以用反证法来证明,假设该性质不成立,即 \(k_{ac} \le k_{ab},k_{bc}\),那么:

\(\because\bigtriangleup ABC\),不可能有两边斜率相等。

\(\therefore k_{ac} < k_{ab},k_{bc}\)

\(\because \begin{cases}k_{ac}< k_{ab} \\k_{ac}< k_{bc} \end{cases}\)

\(\therefore \begin{cases}\left|\frac{d-b}{c-a}\right|< \left|\frac{b-f}{a-e}\right| \\\left|\frac{d-b}{c-a}\right|< \left|\frac{d-f}{c-e}\right| \end{cases} \)

\(\because d-b>0,c-a>0,b-f>0,a-e<0,d-f>0,c-e>0\)

化简原不等式得:
\( \begin{cases}\frac{d-b}{c-a}< \frac{b-f}{e-a} \\\frac{d-b}{c-a}< \frac{d-f}{c-e} \end{cases} \)

不等式两边交叉相乘得:
\( \begin{cases}de+ab-ad-be<cb+af-ab-cf \\cd+be-cb-de<cd+af-ad-cf \end{cases} \)

\(\therefore \begin{cases}2ab+de+cf<cb+af+ad+be \\be+ad+cf<af+bc+ed \end{cases} \)

两式相减得:\(ed+2ab-be-ad<ad+be-ed\)

\(\therefore 2ab+2ed<2ad+2be\)

\(\therefore ab+ed<ad+be\)

\(\therefore ab-ad<be-ed\)

\(\therefore a\times(b-d)<e\times(b-d)\)

\(\because b-d<0\)

\(\therefore a>e\)

如图所示,显然有 \(a<e\),所以原不等式组无解,于是得证,所以斜率最小的两个点一定是相邻的。

接下来我们来考虑如何求出斜率最接近 \(\frac{P}{Q}\) 的两个点,可以用和上述类似的方法来解答,我们不妨建立一个以现在的直线 \(y=\frac{P}{Q}x\) 为 \(x\) 轴的新的平面直角坐标系,这样问题就转化为了求斜率的绝对值最小的两点,可以用上面所说的做法来实现,但是如何旋转坐标系呢?

我们需要将 \(y=\frac{P}{Q}x\) 这条直线旋转到 \(x\) 轴,设其顺时针旋转了 \(\alpha\) 度,那么这个操作其实等价于将原来坐标系中的每一个点逆时针旋转 \(\alpha\) 度。问题就转化了如何求出一个点逆时针旋转 \(\alpha\) 度后的坐标。

如下图所示设两个点分别是 \(B\) 和 \(D\),\(\angle DAB=\alpha\),\(\angle BAC=\beta\),结论为:若 \(B(x,y)\),则有 \(D(x\cos \alpha - y\sin \alpha,x\sin \alpha + y \cos \alpha)\)。

证明:

\(\because B(x,y)\),\(\therefore AC=x,BC=y\)

\(\therefore AB=AD=\frac{x}{\cos \beta}=\frac{y}{\sin \beta}\)

\(\therefore \begin{cases}DE=AD\times \sin\alpha+\beta \\AE=AD\times \cos\alpha+\beta \end{cases} \)

\(\because \begin{cases}\sin\alpha+\beta=\sin \alpha \times \cos \beta+\sin\beta\times \cos \alpha \\\cos\alpha+\beta=\cos\alpha\times\cos\beta-\sin\alpha\times \sin\beta \end{cases} \)(和角公式)

\(\therefore \begin{cases}DE=AD\times (\sin \alpha \times \cos \beta)+AD \times (\sin\beta\times \cos \alpha) \\AE=AD\times (\cos\alpha\times\cos\beta)-AD\times(\sin\alpha\times \sin\beta) \end{cases} \)

将 \(AD=\frac{x}{\cos \beta}=\frac{y}{\sin \beta}\) 带入原不等式得:
\( \begin{cases}DE=\frac{x}{\cos \beta}\times (\sin \alpha \times \cos \beta)+\frac{y}{\sin \beta} \times (\sin\beta\times \cos \alpha) \\AE=\frac{x}{\cos \beta}\times (\cos\alpha\times\cos\beta)-\frac{y}{\sin \beta}\times(\sin\alpha\times \sin\beta) \end{cases} \)

拆括号得:
\( \begin{cases}DE=x\times \sin \alpha +y \times \cos \alpha \\AE=x\times \cos\alpha-y\times \sin\alpha \end{cases} \)

又 \(\because D(AE,DE)\)

\(\therefore D(x\cos \alpha - y\sin \alpha,x\sin \alpha + y \cos \alpha)\),得证。

所以最终的做法是:将每个点逆时针旋转后得到新的点,再将新的点按照横坐标排序,答案为相邻两点构成的直线的斜率与 \(y=\frac{P}{Q}\) 的差的最小值。

标签:cos,frac,题解,times,beta,C0328,alpha,1005,sin
From: https://www.cnblogs.com/Creeperl/p/17913423.html

相关文章

  • Omkar and Akmar 题解
    题意:有一个\(n\)个点的环,以及两个人。每个人可以向环中任意一个位置放置一个\(A\)或者\(B\),但是相邻的位置不能相同,不能行动者输。问最终的局面有多少种。一个结论是:后手必胜。证明:最终肯定不可能出现两个连续的空格,否则一定可以在其中一个上填\(A\)或\(B\)。所以最多只......
  • Square-free division (easy version) 题解
    题意:给定一个长度为\(n\)的序列,求最少能将这个序列分成多少段使得任意一段中不存在两个数的积为完全平方数。一个小Trick:如果两个数乘起来为平方数,可以先将每个数的平方因子除掉,然后这两个数必然相等。于是这道题被转化为了一个区间不能有相等的值,这就很典了。设\(pos_{a_{i......
  • Animals and Puzzle 题解
    原题链接:CF713D题意:给定一个\(n\timesm\)的地图\(a\),\(a_{i}\)为\(0\)或\(1\)。有\(t\)次询问,每次询问给定一个矩形,求出这个矩形中最大的由\(1\)构成的正方形的边长是多少。首先考虑预处理出\(d_{i,j}\)表示以\((i,j)\)为左上角的最大正方形边长是多少。对于每......
  • C0392 B 【1109 B组】预处理器 题解
    题意:求有多少个长度为\(n\)的数组\(a\)满足以下条件。条件一:\(l_{i}\lea_{i}\ler_{i}\)。条件二:\(a_{i}\)模\(2\)等于\(p_{i}\)。条件三:\(s\le\suma_{i}\let\)。求答案模\(mod\)的值,\(mod\)不一定是一个质数。数据范围:\(n\le13\)。又积累到一......
  • A Simple Task 题解
    这道题比较简单,简述一下思路。考虑状压\(DP\)。设\(dp_{i,j}\)表示走到第\(i\)个点,之前走过的点的状态为\(j\)的环的数量。这里有一个细节,就是我们都钦定每个走过的第一点是整个状态中编号最小的点,这样不会重复计算。考虑如何进行转移。如果当前点的编号比走过的最小编......
  • CF1900D Small GCD 题解
    原题链接:CF1900D,题意不多赘述。首先可以将\(a\)数组排序,并且枚举中间的那个数\(a_i\)。那么答案就是\(\sum_{j=1}^{i-1}\gcd(a_j,a_i)\times(n-i)\)。重点在于求前面的\(\gcd\)。可以用欧拉反演,但是也可以不用,因为我不会。假设我们当前已经枚举到了\(a_i\),设\(f_k\)表......
  • CF1902D Robot Queries 题解
    题意:有一个二维平面直角坐标系,给定一串向某个方向移动\(1\)个单位的操作。有\(q\)个询问,对于每个询问给定\(x,y,l,r\),问如果倒着做\(l\)到\(r\)这段区间中的操作,是否会经过\((x,y)\)。ds题。先预处理出\(sx_i,sy_i\)表示执行完操作\(i\)后的位置,如果在\([l,r]\)......
  • 华中师范大学2023新生赛 H 龙 题解
    Link华中师范大学2023新生赛H龙Question有\(m\)个宝石孔,有\(n\)个宝石,每个宝石可以提升\(a_i\)点战斗力每次镶嵌一个宝石,被选中的宝石会随机选择一个宝石孔进去,如果这个孔原来有宝石,则原来的宝石会被损坏你可以任意决定镶嵌宝石的顺序,她想知道,如果把着\(n\)颗宝......
  • 华中师范大学2023新生赛 D 身无彩凤双飞翼 题解
    Link华中师范大学2023新生赛D身无彩凤双飞翼Question给出一个\(n\timesm\)的网格,网格上有一些障碍,问最少添加多少障碍才能使\((1,1)\)和\((n,m)\)不连通Solution我好像用了一种和标答不一样的写法我们先对图bfs一次,如果\((1,1)\)不能到达\((n,m)\),则图本来就......
  • CF1905 B Begginer's Zelda 题解
    LinkCF1905BBegginer'sZeldaQuestion给出一棵树,每次能把一条路径压缩成一个点,求最少几次把树压缩成一个点Solution贪心的想,路径肯定越长越好,所以肯定是以一个儿子节点为起点,以一个儿子节点为终点,儿子节点合并了儿子到根的父节点也合并了,每次合并两个儿子节点,假设儿子节点......