题目描述:

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是不是说谎了。你能否帮她验证一下?

算法练习 12 :约会_字符串



算法思路分析:

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"

--------------------------------------------------------------------------------------------------------------------------------

详细内容请关注公众号:目标检测和深度学习

算法练习 12 :约会_字符串_02

--------------------------------------------------------------------------------------------------------------------------------