2020ICPC上海 L-Traveling in the Grid World
2020ICPC上海 L-Traveling in the Grid World
题意
给定一个的网格图,你站在起始点,每次移动可以选择一个点走线段到达它且这条线段不能经过其他格点,可以做任意次移动,问到达所需的移动距离总和最小为多少。
分析
一个简单的结论:若,可以直接从走到,否则只需要一次转折即可到达。假设转折点为那么需要满足且。暴力枚举和连线附近的点作为转折点计算距离取最小值即可。
Code
#include<bits/stdc++.h>
using namespace std;
const double eps=1e-8;
const int mod=1e9+7;
const int N=1e5+10;
const int inf=1e9;
int T,n,m;
int xx[]={1,-1,0,0};
int yy[]={0,0,1,-1};
double cal(int x,int y){
return sqrt(1.0*x*x+1.0*y*y);
}
double gao(int x,int y){
if(y<0||y>m) return inf;
if(__gcd(x,y)!=1||__gcd(n-x,m-y)!=1) return inf;
if(x*m==y*n) return inf;
return cal(x,y)+cal(n-x,m-y);
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
double ans=inf;
if(__gcd(n,m)==1){
ans=sqrt(1.0*n*n+1.0*m*m);
}else{
for(int i=0;i<=n;i++){
int j=i*m/n;
ans=min(ans,gao(i,j));
ans=min(ans,gao(i,j-1));
ans=min(ans,gao(i,j+1));
}
}
printf("%.9f\n",ans);
}
return 0;
}
标签:
思维
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· ASP.NET Core - 日志记录系统(二)
· .NET 依赖注入中的 Captive Dependency
· .NET Core 对象分配(Alloc)底层原理浅谈
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(一):从.NET IoT入
· .NET 开发的分流抢票软件,不做广告、不收集隐私
· ASP.NET Core - 日志记录系统(二)
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· 实现windows下简单的自动化窗口管理
2019-12-15 牛客练习赛55 E-树 树形DP