题解 | #走斜线#
走斜线
http://www.nowcoder.com/questionTerminal/da299c5d7e654c8e9f765c5636a1c2a0
- 对称性,所以指定y永远最大,然后k大于k肯定走不完。
- 图像思路,一定要在空间中想。
- 最后默认最多斜线就是k,然后按照情况分类情况,减掉直线就可以。
#include <bits/stdc++.h> using namespace std; int main() { int T; long long x, y, k, t, ans; scanf("%d", &T); while(T--) { scanf("%lld%lld%lld",&x,&y,&k); if(x > y) { // 要到达目的地花费的最小步数是x和y的最大值,如果k小于这个值就一定到不了 t = x; x = y; y = t; }//由于是对称得,一摸一样的。 if(y > k) { //要到达目的地花费的最小步数是x和y的最大值,如果k小于这个值就一定到不了 puts("-1"); continue; } ans = k;//0条直线(y-x)是偶数且(k-x)是偶数 if((y - x) % 2) ans--; // (y-x)是奇数,有一条直线 else if((k - x) % 2) ans -= 2;// 2 条直线(y-x)是偶数且(k-x)是奇数。 printf("%lld\n", ans); } return 0; }
算法解析 文章被收录于专栏
这里主要是算法岗的自我思路总结