题解:P11697 [ROIR 2025] 二维蚱蜢
简单数学题,但是有些坑。
首先我们制定思路:怎样的路线才是最优路线?
显然走斜线是比较划算的,因为它相当于两次运动。
于是我们可以先走对角线,然后使用平移调整,为了方便讲述,我先给出代码:
#include<bits/stdc++.h>
using namespace std;
int n, m, k;
int main(){
cin >> n >> m >> k;
cout << (int)(ceil(1.0 * min(n - 1, m - 1) / k) + ceil(1.0 * (max(n, m) - min(n, m)) / k));
return 0;
}
显然答案转换为公式如下:
\[\lceil \frac{\min(n - 1, m - 1)}{k}\rceil + \lceil \frac{\max(n, m) - min(n, m)}{k}\rceil
\]
这是一个二项式,每次尽可能走 \(k\) 格,第一项即为斜角步数,第二项即为平移调整步数,比较简单,不做讲述。
问:为什么第一项的 \(n\) 和 \(m\) 要减一?
答:因为起点在 \((1, 1)\) 而非 \((0, 0)\),画图可知仅需走 \(n - 1\) 行和 \(m - 1\) 列。
posted on 2025-02-11 17:56 zhangzirui66 阅读(58) 评论(0) 收藏 举报