zoukankan      html  css  js  c++  java
  • Wannafly summer camp Day3--Knight

    题目描述

    有一张无限大的棋盘,你要将马从(0,0)移到(n,m)。
    每一步中,如果马在(x,y),你可以将它移动到(x+1,y+2),(x+1,y−2),(x−1,y+2),(x−1,y−2),(x+2,y+1),(x+2,y−1),(x−2,y+1)或(x−2,y−1)。
    你需要最小化移动步数。

    输入

    第一行一个整数t表示数据组数 (1≤t≤1000)。
    每组数据一行两个整数n,m (∣n∣,∣m∣≤109)。

    输出

    每组数据输出一行一个整数表示最小步数。

    样例输入

    2
    0 4
    4 2
    

    样例输出

    2
    2

    首先让x、y都是正数,并且x<=y
    当y<=2*x  ans=(x+y)/3+(x+y)%3;   特判:(2,2)需要4步
    当y>2*x   c=(y-2*x)%4;  ans=x+c+(y-2*x-c)/2; 特判:(0,1)需要3步
     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 typedef long long ll;
     5 
     6 int main()
     7 {
     8     int t;
     9     ios::sync_with_stdio(false);
    10     cin.tie(0); cout.tie(0);
    11     cin>>t;
    12     ll x,y;
    13     while(t--)
    14     {
    15         cin>>x>>y;
    16         if(x<0) x=-x;
    17         if(y<0) y=-y;
    18         if(x>y) swap(x,y);
    19         ll ans;
    20         if(y<=2*x)
    21         {
    22             if(x==2&&y==2) ans=4;
    23             else    ans=(x+y)/3+(x+y)%3;
    24         }
    25         else
    26         {
    27             ll c=(y-2*x)%4;
    28             ans=x+c+(y-2*x-c)/2;
    29             if(x==0&&y==1)  ans=3;
    30         }
    31         cout<<ans<<endl;
    32     }
    33     return 0;
    34 }
    如有错误,请指正,感谢!
  • 相关阅读:
    数据库的初始创建
    组合总和 II (Leetcode 暴力)
    Leetcode 最大正方形(两种解法)
    Python PyAPNs 实现消息推送
    Windows下nginx+web.py+fastcgi服务搭建
    Python学习预备
    《Effective C++》笔记:IV
    《Effective C++》笔记:III
    《Effective C++》笔记:II
    《Effective C++》笔记:I
  • 原文地址:https://www.cnblogs.com/scott527407973/p/9864600.html
Copyright © 2011-2022 走看看