1 题目
在知能科技公司的笔试题中,出现过
题意: 给一个字符串,N,S,W,E,分别代表上下左右。当走过一个没有走过的边时,花费5秒,如果走过这个边,则花费1秒。(注意:判断的是两点之间的距离,不是单纯的点).给你他的行动轨迹,求消耗的时间。
例子1
NNN
15
例子2
NS
6
例子3
WWEN
16
例子4
WWEE
12
例子5
NWNWS
25
来自题目:Testing Round #16 (Unrated) C. Skier
2 解析
将每条路径的两个端点坐标存储起来,使用元组来存储两个坐标,注意一条线段的两个坐标是有两个方向。
3 python实现
direction = {
'N':(0,1),
'S':(0,-1),
'E':(-1,0),
'W':(1,0)
}
x,y= 0,0
ans = 0
# path = 'WWEN' # 输出16
path = input()
# path ='NWNWS' # 输出25
# x1,y1线段的当前坐标,x,y表示线段的另一个坐标。
visit = set([(0,0,0,0)])
for p in path:
dx,dy = direction[p]
x1,y1 = x+dx,y+dy
if (x1,y1,x,y) in visit or (x,y,x1,y1) in visit:
ans +=1
else:
ans+=5
# 存储线段,线段的两个坐标,两个方向都要存储
visit.add((x1,y1,x,y))
visit.add((x,y,x1,y1))
x,y =x1,y1
print(ans)