x[i] 表示:从第一步到第i步为止,横坐标的位置;

y[i]表示:从第一步到第i步为止, 纵坐标的位置;

设 字符串S的长度为 len;

则有 k * x[len] + x[i] = a; 而且 k * y[len] + y[i] = b; (这里 下标从1开始),而且要注意的是 k 为非负整数, 还要考虑 x[len] 或 y[len]为0的情况。然后从1到len枚举 i 就可以了。


附上代码:

 1 # by Stomach_ache
 2 def move(s, i):
 3         if s[i] == 'U':
 4             return 0, 1;
 5         elif s[i] == 'D':
 6             return 0, -1;
 7         elif s[i] == 'L':
 8             return -1, 0;
 9         else:
10             return 1, 0;
11 a, b = map(long, raw_input().split());
12 s = raw_input();
13 l = len(s);
14 x, y = [0]*(l+1), [0]*(l+1)
15 f = 0;
16 for i in xrange(1, l+1):
17     x[i], y[i] = x[i-1], y[i-1];
18     tmpx, tmpy = move(s, i-1)
19     x[i] += tmpx;
20     y[i] += tmpy;
21 if a == 0 and b == 0:
22     print "Yes";
23 else:
24     # x[l] and y[l] can both be zero, so we can not divide directly
25     # k must be a nonegative interger
26     for i in xrange(1, l+1):
27         if x[l] == 0 and y[l] != 0:
28             if a == x[i] and (b - y[i]) % y[l] == 0 and (b - y[i]) / y[l] >= 0:
29                 f = 1
30                 break;
31         elif y[l] == 0 and x[l] != 0:
32             if b == y[i] and (a - x[i]) % x[l] == 0 and (a - x[i]) / x[l] >= 0:
33                 f = 1
34                 break;    
35         elif x[l] == 0 and y[l] == 0:
36             if a == x[i] and b == y[i]:
37                 f = 1;
38                 break;
39         elif (a - x[i]) % x[l] == 0 and (b - y[i]) % y[l] == 0:
40             if (a - x[i]) / x[l] == (b - y[i]) / y[l] and (b - y[i]) / y[l] >= 0:
41                 f = 1;
42                 break;
43 
44     if f:
45         print "Yes";
46     else:
47         print "No";


优质内容筛选与推荐>>
1、快速了解和使用Photon Server
2、js MD5加密与 java MD5加密不一致
3、小米手机测试代码电池测试代码
4、netperf编译./configure时报错 "error: cannot guess build type;you nust specify one"
5、引用类型构造器


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号