Traveling in the grid world

题目描述

有一个 \(n\times m\) 的格点图,两点之间走他们的连线,但是这条连线不能恰好覆盖其他整点。还要求相邻两步之间的连线不能斜率相同,求从 \((0,0)\) 走到 \((n,m)\) 的最短距离。

\(1\leq n,m\leq 10^6\)

解法

首先考虑一种特殊情形:\(\gcd(n,m)=1\) ,就说明起点到终点的连线就是答案。

从大体上看,由于走的是直线,所以我们希望折线的次数越少越好(有点感性)。我们考虑只折一次的最优解是什么,可以画图分析:

假设在 \(A,B\) 的路径中的拐点是 \(C\) ,那么如果 \(AC\) 之间出现了一个整点 \(D\) 怎么办呢?我们发现由于三角形两边之和大于第三边,此时选 \(D\) 做为拐点一定最优,那么一直这样调整。如果 \(C\) 是最短路径的一个拐点,那么他一定是满足条件的,所以最短即合法 。\(BC\) 段可以用类似的方法来调整,最后的状态一定两边都没有整点。

那么我们如何说明最优解是只折一次呢?假设多段折线最优,可以取多段折线第一段作为 \(AC\) 段,然后连接 \(BC\) ,总长度一定是比多段折线要小的。如果不合法呢?那调整会得到更小的结果,所以与我们的假设矛盾,反证法证明成功。

ICPC题目选讲的更多相关文章

  1. CodeChef题目选讲

    https://wenku.baidu.com/view/2445a0322f60ddccda38a023.html 关键点:不超过7条 根据咕咕原理,所以答案最少是N/7;(N小于49就暴力) 随机 ...

  2. hwy题目选讲

    \[ f(n) = n/5 + f(n/5)\\ g(n) = (n\mod10)! * g(n/5)\mod 5\\ ans = f(n)*inv(2^g(n))\\ \]

  3. 【WC2019笔记】IOI2018 / ACM题目选讲

    哇!济南的 rqy 大佬讲课!就是 $luogu$ 上有名的那位! 上面这句话写错了,请大家无视 XylophoneIOI2018 练习赛 T2题意:交互提有一个 $0\sim n-1$ 的排列,保证 ...

  4. PJ可能会用到的动态规划选讲-学习笔记

    PJ可能会用到的动态规划选讲-学习笔记 by Pleiades_Antares 难度和速度全部都是按照普及组来定的咯 数位状压啥就先不讲了 这里主要提到的都是比较简单的DP 一道思维数学巧题(补昨天) ...

  5. PJ考试可能会用到的数学思维题选讲-自学教程-自学笔记

    PJ考试可能会用到的数学思维题选讲 by Pleiades_Antares 是学弟学妹的讲义--然后一部分题目是我弄的一部分来源于洛谷用户@ 普及组的一些数学思维题,所以可能有点菜咯别怪我 OI中的数 ...

  6. 2019暑期金华集训 Day6 杂题选讲

    自闭集训 Day6 杂题选讲 CF round 469 E 发现一个数不可能取两次,因为1,1不如1,2. 发现不可能选一个数的正负,因为1,-1不如1,-2. hihoCoder挑战赛29 D 设\ ...

  7. [转载]CSP-J/S 第一轮知识点选讲

    CSP-J/S 第一轮知识点选讲 转载自这里 感谢原博主的大力整理! 信息学史及基本知识 一.信息学及计算机史 计算机的顶级奖项:图灵奖.冯·诺依曼奖 图灵奖:由ACM(美国计算机协会)设立于1966 ...

  8. 正睿OI DAY3 杂题选讲

    正睿OI DAY3 杂题选讲 CodeChef MSTONES n个点,可以构造7条直线使得每个点都在直线上,找到一条直线使得上面的点最多 随机化算法,check到答案的概率为\(1/49\) \(n ...

  9. DP选讲

    $DP$选讲直接上题吧放个题单[各省省选DP](https://www.luogu.com.cn/training/151079)$P5322[BJOI2019]$排兵布阵一眼题,考虑$dp[i][j ...

随机推荐

  1. SPOJ PHRASES Relevant Phrases of Annihilation(后缀数组 + 二分)题解

    题意: 给\(n\)个串,要你求出一个最长子串\(A\),\(A\)在每个字串至少都出现\(2\)次且不覆盖,问\(A\)最长长度是多少 思路: 后缀数组处理完之后,二分这个长度,可以\(O(n)\) ...

  2. v-for & for...in vs for...of

    v-for & for...in vs for...of for..in vs for...of for (const key in object) { if (Object.hasOwnPr ...

  3. 如何在 Apple Watch S6上离线播放音乐

    如何在 Apple Watch S6上离线播放音乐 Apple Watch 离线播放音乐 营销策略,捆绑销售 Apple Watch + AirPods + Apple Music Apple Wat ...

  4. 前端 vs 后端

    前端 vs 后端 前端与后端: 有什么区别? 前端和后端是计算机行业中最常用的两个术语. 在某种程度上,它们成了流行语. 它们决定了您作为软件开发人员所从事的工作类型,所使用的技术以及所获得的收入. ...

  5. CSS3 & gradient & color & background

    CSS3 & gradient & color & background css background https://developer.mozilla.org/en-US/ ...

  6. TS type different String / string

    TS type different String / string String / string https://stackoverflow.com/questions/14727044/types ...

  7. Typescript快速入门

    目录 什么是Typescript 为什么学习Typescript 快速搭建开发环境 1.安装node.js 2.使用node自带的npm安装Typescript编译器 3.配置vscode编辑环境 4 ...

  8. kubernetes和docker----2.学习Pod资源

    Pod--k8s最基础的资源 我们想要的是单个容器只运行一个进程 然而有时我们需要多个进程协同工作,所以我们需要另外一种更加高级的结构将容器组合在一起---pod Pod 我们来看一个最基本的pod ...

  9. Vue学习笔记-Vue.js-2.X 学习(三)===>组件化高级

    (四) 组件化高级 1.插槽(slot)的基本使用 A:基本使用: <slot></slot> B:默认置:<slot><h1>中间可以放默认值< ...

  10. Vuex入门、同步异步存取值进阶版

    关注公众号查看原文: 1. vueX介&绍安装 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方 ...