洛谷-P9830 题解

news/2025/3/15 4:08:33/文章来源:https://www.cnblogs.com/wanguan/p/18344028

思路分析

分析样例:

见红线,长宽各为 2,存在格点;黄线长 2 宽 3,没有格点。

考虑延长黄线使得长 4 宽 6,发现有格点。思考格点,如果长和宽都可以被分成 \(p\times l\) 的格式,则存在格点。那么,就能想出:

推论 1:对于 \((0 \ , \ 0)\)\((x \ , \ y)\) 之间没有格点,当且仅当 \(\gcd(x \ , \ y )=1\)

对推论 1 的证明:

若存在格点 \(A\),其坐标为 \((a \ , \ b)\),由于在同一直线上,斜率 \(k\) 相同,则有 \(k=\dfrac{a}{b}=\dfrac{x}{y}\),即 \(b=\dfrac{a\times y}{x}\)。由于 \(b\) 为整数,则有 \(x \ | \ a\times y\)

采用反证法,\(\gcd(x \ , \ y )=1\) 时存在格点。

由于互质,\(x=\prod\limits_{i=1}^{s1}p_i^{c_i} \ , \ y=\prod\limits_{i=1}^{s2}q_i^{d_i}\),假设 \(x \ | \ y\)\(y\) 必然有因子 \(\prod\limits_{i=1}^{s1}p_i^{c_i}\),而实际上没有,所以 \(y\) 对该式没有贡献。即:$x \ | \ a\times y \Leftrightarrow x \ | \ a $。

\(A\) 是线段上一点,有 \(a<x\),则 \(b\) 一定不属于 \(\mathbb{Z^+}\),与原有条件冲突,由此可证。

得出推论 1 后,我们就能判断两点之间是否有格点了。那么如何得出最短答案呢?

(图是随手画的,具体有的性质以下文所述为准。)

见上,假设 \(AD\) 之间存在格点(在之后称为不合法),于是我们找到任意一点 \(C\) 进行更新。

假设 \(C\) 为不合法,以图为例,在 \(AC\) 上可以取一格点 \(B\),根据三角形定则 \(| \ BD \ |>| \ BC \ |+| \ CD \ |\),则 \(B\) 更优。假设无法在 \(AB\)\(BD\) 上取格点,那么 \(B\) 的取点是合法的,可以得出:

推论 2:对于任意不合法的取点,必然可以在原线段取到更优的合法方案。

那么就有:

推论 2.1:最优方案必然是合法的。

对推论 2.1 的证明:

假设最优方案不合法,根据推论 2,则有更优方案可以更新,与原有条件冲突,由此可得。

以上是一个转折点的情况,那如果有多个转折点呢?

如图,多个转折点的情况是不需要考虑的,见图,由于三角形定则,红色线的长度小于另外两条边之和。换句话说:

推论 3:最优方案只转折一次或零次。

于是我们只要枚举一个点就可以了,如果在整个 \(n\times m\) 的范围枚举,寻找最优方案,但这个时间复杂度显然是不合理的。其实我们只需要枚举线段附近的点就可以,这样复杂度就可以变成 \(\mathcal{O}(n)\)

代码实现

#define by_wanguan
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int t,n,m,y11,y2,y3,g; double dn,dm,nowm,ans,k;
double dis(double a,double b,double x,double y){return sqrt((x-a)*(x-a)+(y-b)*(y-b));
}
void solve(){k=(double)m/n;//斜率if((g=__gcd(n,m))==1){printf("%.15lf\n",dis(0,0,n,m)); return ;}dn=n,dm=m;for(int i=1;i<n;i++){nowm=k*i;y11=(int)(nowm),y2=y11+1,y3=y11-1;//x坐标为i时附近的点的y坐标if(__gcd(n-i,m-y11)==1&&__gcd(i,y11)==1&&abs(y11-k*i)>1e-10)//判断是否合法,abs()是在判断是否为原线段上的点ans=min(ans,dis(i,y11,n,m)+dis(0,0,i,y11));if(__gcd(n-i,m-y2)==1&&__gcd(i,y2)==1&&abs(y2-k*i)>1e-10)ans=min(ans,dis(i,y2,n,m)+dis(0,0,i,y2));if(__gcd(n-i,m-y3)==1&&__gcd(i,y3)==1&&abs(y3-k*i)>1e-10)ans=min(ans,dis(i,y3,n,m)+dis(0,0,i,y3));}printf("%.15lf\n",ans);
}
int main(){scanf("%d",&t); while(t--){scanf("%d%d",&n,&m);ans=1e9;solve();
}
} 

喵。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/778328.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kubernetes-存储卷与持久化详解

目录背景volume介绍emptyDirHostPathNFSconfigMapSecretPersistentVolume介绍PV回收策略PV访问策略基于nfs或nas创建pv创建hostpath类型的pvPV的状态PersistentVolumeClaim创建pvc与pv进行绑定使用pvc动态存储storageclass创建目录nfs添加授权目录创建yaml 背景 容器部署过程中…

如何通过视频剪辑软件修复原始视频声音小的问题 All In One

如何通过视频剪辑软件修复原始视频声音小的问题 All In One 视频后期处理 (剪映)如何通过视频剪辑软件修复原始视频声音小的问题 All In One视频后期处理 (剪映)demos视频声音太小了, 音量开到 100%,还是听不清,建议加个麦,或者后期处理视频的时候提高音量https://www.bilib…

kettle从入门到精通 第八十四课 ETL之kettle kettle中Get data from XML使用实战教程

场景:解析xml文件或者内容解析出其中某些字段。 本来想着这个步骤使用起来比较简单,就没有梳理成文,结果群里的小伙伴为了使用这个步骤折腾了一下午。故有了此文。 在开始学习之前我们一起来学习下xml命名空间的相关知识,为下文展开做基础铺垫。 1、xml命名空间XML 的命名空…

双边滤波

双边滤波(Bilateral Filtering)是一种非线性的图像处理方法,主要用于图像的平滑同时保持边缘清晰。与传统的低通滤波器(如均值滤波或高斯滤波)不同,双边滤波不仅考虑了空间上的邻近性,还考虑了像素值的相似性,这使得它能够在去除噪声的同时较好地保留图像的边界和细节。…

用项目详细讲讲vue3路由

1.【对路由的理解】 Vue Router 是 Vue.js 官方的路由管理器,它用于构建单页面应用(SPA),允许我们在不同的页面间进行导航,而无需刷新整个页面。 路由配置文件代码如下:import {createRouter,createWebHistory} from vue-router import Home from @/pages/Home.vue impo…

多态的概念,前提,注意事项以及访问成员的特点 day09

多态:某一个事物在不同状态下的多种状态举例:1、学生是人,老师是人,医生是人。2、汽态的水是水,固态的水是水,液态的水是水在java中要实现多态的话,需要有3个前提:1、必须要有继承关系2、要有方法的重写(思考可否不重写?)不是必须要重写的,重写可以体现子类的专属特…

[vue3] vue3初始化渲染流程

本文解析了 Vue3 组件初次渲染的流程,涵盖应用程序初始化、核心渲染步骤,以及 vnode 的创建和渲染,探讨了 Vue3 内部机制及其跨平台实现的关键细节。组件初次渲染流程 组件是对DOM树的抽象,组件的外观由template定义,模板在编译阶段会被转化为一个渲染函数,用于在运行时生…

[米联客-安路飞龙DR1-FPSOC] SDK入门篇连载-03 GPIO PS/PL实验

软件版本:Anlogic -TD5.9.1-DR1_ES1.1 操作系统:WIN10 64bit 硬件平台:适用安路(Anlogic)FPGA 实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台:https://milianke.tmall.com/ 登录"米联客"FPGA社区 http://www.uisrc.com 视频课程、答疑解惑! 1 概述本…

2024/8/5笔记

字符串专题 1 暑假二南集训 day1 A - GT考试 洛谷 - P3193 [HNOI2008] GT考试 题目描述 阿申准备报名参加 GT 考试,准考证号为 \(N\) 位数\(X_1,X_2…X_n\ (0\le X_i\le 9)\),他不希望准考证号上出现不吉利的数字。 他的不吉利数字\(A_1,A_2,\cdots, A_m\ (0\le A_i\le 9)\) …

[米联客-安路飞龙DR1-FPSOC] SDK入门篇连载-02 FPSoc程序固化入门

软件版本:Anlogic -TD5.9.1-DR1_ES1.1 操作系统:WIN10 64bit 硬件平台:适用安路(Anlogic)FPGA 实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台:https://milianke.tmall.com/ 登录"米联客"FPGA社区 http://www.uisrc.com 视频课程、答疑解惑! 1概述在…

[米联客-安路飞龙DR1-FPSOC] SDK入门篇连载-01 FPSoc开发入门

软件版本:Anlogic -TD5.9.1-DR1_ES1.1 操作系统:WIN10 64bit 硬件平台:适用安路(Anlogic)FPGA 实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台:https://milianke.tmall.com/ 登录"米联客"FPGA社区 http://www.uisrc.com 视频课程、答疑解惑! 1概述1.…

maven 中 scope标签的作用以及引入本地jar包打包方法

1. scope标签的作用2、使用system标签 项目三方jar存放位置结构:pom.xml中引入三方jar: <dependency><groupId>test</groupId><artifactId>testa</artifactId><version>0.0.1</version><scope>system</scope><syst…