SRM538-div1-2-div2-3-EvenRoute


题目大意:
     直角坐标系上有N个点,坐标用int[] x和 int[]y表示。现在从原点(0,0)出发,每步只能往上下左右四个方向中的一个移动距离1。要求遍历所有的这N个点,并且最终停止在某一个点上。那么,给定一个取值为0或1的数wantedParity,问有没有可能移动的步数奇偶性与 wantedParity相同。
     数据规模:N取值为[1,50], 每个坐标值取值为[-1000000, 1000000]。
     

思路:
     这道题具有一定的迷惑性,其实仔细想想会发现,最终步数的奇偶性只与最终停留的点有关。
     为什么会这样?首先需要证明,从原点触发到某个点(x,y),无论路线如何,步数的奇偶性总是和|x|+|y|相同。
     证明:到达(x,y)点是,无论如何移动,x轴移动的步数必然是2*kx+|x|, y轴移动的步数必然是2*ky+|y|,所以总移动步数为2*(kx+ky)+|x|+|y|,奇偶性与|x|+|y|相同。
     根据该规律,我们只需要决定最后停留在那个点上就可以确定移动步数的奇偶性。因此遍历各个点的|x|+|y|值,只要存在一个奇偶性与wantedParity相同,答案就是肯定。

Java代码:

public class EvenRoute
{
      public String isItPossible(int[] x, int[] y, int wantedParity)
      {
            for(int i = 0; i < x.length; ++i){
                  if((Math.abs(x[i]) + Math.abs(y[i])) % 2 == wantedParity % 2){
                        return "CAN";
                  }
            }
            return "CANNOT";
      }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值