题目描述:
Bob和Alice有个约会,一大早Bob就从点(0,0)出发,前往约会地点(a,b)。Bob没有一点方向感,因此他每次都随机的向上下左右四个方向走一步。简而言之,如果Bob当前在(x,y),那么下一步他有可能到达(x+1,y),(x-1,y),(x,y+1),(x,y-1)。很显然,当他到达目的地的时候,已经很晚了,Alice早已离去。第二天,Alice质问Bob为什么放她鸽子,Bob说他昨天花了s步到达了约会地点。Alice怀疑Bob是不是说谎了。你能否帮她验证一下?
算法思路分析:
1、输入字符串并转换为int类型,存到map里面;
2、从[0,0]到[a,b]必须满足a+b<=s且(s-a-b)%2==0;
注:a,b的正负原则上对步数没有什么影响,只会影响方向,所以我们不考虑方向;若要达到目的地他的整体方向不变,若有倒走这种情况就必须相应的正走一步,来满足达到目的地的要求(你要是一直来回走也没事,只要最终到了就ok,但是 大体方向得对啊,比如[a,b]=[5,5]你的大体方向就是向右向下,可以上走左走但还是得走回来!所以这个不在总体方向上的步骤肯定得是偶数,比如一左一右,一上一下来修改整体方向),故步数最小为a+b,可能性为a+b+2x(x可以理解为与 总体方向相反的方向的次数);
3、若存在,输出Yes,否则输出No;
代码练习:
#/usr/bin/env.python
# -*- coding:utf-8 -*-
if __name__=="__main__":
abs_input = raw_input()
a,b,s = map(int,abs_input.split())
a = abs(a)
b = abs(b)
if a+b<=s and (s-a-b)%2==0:
print "Yes"
else:
print "No"
or
#/usr/bin/env.python
# -*- coding:utf-8 -*-
if __name__=="__main__":
abs_input = raw_input()
abs_input_split=[]
abs_input_split = abs_input.split()
abs_new = []
for num in abs_input_split:
abs_new.append(int(num))
a = abs(abs_new[0])
b = abs(abs_new[1])
s = abs(abs_new[2])
if a+b<=s and (s-a-b)%2==0:
print "Yes"
else:
print "No"
--------------------------------------------------------------------------------------------------------------------------------
详细内容请关注公众号:目标检测和深度学习
--------------------------------------------------------------------------------------------------------------------------------