defcalc(a):
ans =0for i,v inenumerate(a):if i and a[i-1]==10or i-1>0and a[i-2]==10:
v *=2
ans += v
return ans
classSolution:defisWinner(self, p1: List[int], p2: List[int])->int:
a,b = calc(p1),calc(p2)if a == b:return0if a > b:return1return2
classSolution:defminimumCost(self, start: List[int], target: List[int], specialRoads: List[List[int]])->int:
g = defaultdict(dict)defget(x,y):return x *1000000+y
defadd_edge(u,v,w):if v in g[u]:
g[u][v]=min(g[u][v],w)else:
g[u][v]= w
defmanhadun(x1,y1,x2,y2):returnabs(x1-x2)+abs(y1-y2)
sx,sy = start
tx,ty = target
s,t = get(sx,sy),get(tx,ty)
add_edge(s,t,manhadun(tx,ty,sx,sy))
ps ={(sx,sy),(tx,ty)}defadd_p(x,y):
ps.add((x,y))for x1,y1,x2,y2,w in specialRoads:
add_p(x1,y1)
add_p(x2,y2)
u,v = get(x1,y1),get(x2,y2)
add_edge(u,v,w)
add_edge(s,u,manhadun(sx,sy,x1,y1))
add_edge(v,t,manhadun(x2,y2,tx,ty))for x1,y1 in ps:
u = get(x1,y1)for x2,y2 in ps:
v = get(x2,y2)
add_edge(u,v,manhadun(x2,y2,x1,y1))
dis = defaultdict(lambda: inf)
q =[(0,s)]while q:
c,u = heappop(q)if u == t :return c
if c > dis[u]:continuefor v, w in g[u].items():
d = c + w
if d < dis[v]:
dis[v]= d
heappush(q,(d,v))return-1
classSolution:defsmallestBeautifulString(self, s:str, k:int)->str:
n =len(s)
s =list(s)
ans =list(s)
up =chr(ord('a')+ k -1)
i = n -1
ans[n-1]=chr(ord(ans[i])+1)while i < n:if ans[i]> up:if i ==0:return''
ans[i]='a'
i -=1
ans[i]=chr(ord(ans[i])+1)elif i and ans[i]== ans[i-1]or i-1>0and ans[i]== ans[i-2]:
ans[i]=chr(ord(ans[i])+1)else:
i +=1return''.join(ans)