题解 | #走斜线#

走斜线

http://www.nowcoder.com/questionTerminal/da299c5d7e654c8e9f765c5636a1c2a0

  1. 对称性,所以指定y永远最大,然后k大于k肯定走不完。
  2. 图像思路,一定要在空间中想。
  3. 最后默认最多斜线就是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;
}
算法解析 文章被收录于专栏

这里主要是算法岗的自我思路总结

全部评论

相关推荐

一颗宏心:华为HR晚上过了十二点后还给我法消息。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:28
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务