1367D - Task On The Board - CodeForces Solution


constructive algorithms greedy implementation sortings *1800

Please click on ads to support us..

Python Code:

for i in range(int(input())):
  s=input()
  n=int(input())
  A=list(map(int,input().split()))
  D,L=dict(),[]
  for j in range(len(s)):
    if s[j] in D:
      D[s[j]]+=1
    else:
      D[s[j]]=1
      L.append(s[j])
  L.sort(reverse=True)
  N=[None for j in range(n)]
  G=[]
  pos=0
  count=0
  while count<n:
    S=[]
    for j in range(n):
      diff=0
      for e in G:
        diff+=abs(e-j)
      if diff==A[j]:
        S.append(j)
    S=list(set(S).difference(set(G)))
    while len(S)>D[L[pos]]:
      pos+=1
    for j in S:
      N[j]=L[pos]
      G.append(j)
      count+=1
    pos+=1
  ans=''
  for j in N:
    ans+=j
  print(ans)


Comments

Submit
0 Comments
More Questions

1622A - Construct a Rectangle
1620A - Equal or Not Equal
1517A - Sum of 2050
620A - Professor GukiZ's Robot
1342A - Road To Zero
1520A - Do Not Be Distracted
352A - Jeff and Digits
1327A - Sum of Odd Integers
1276A - As Simple as One and Two
812C - Sagheer and Nubian Market
272A - Dima and Friends
1352C - K-th Not Divisible by n
545C - Woodcutters
1528B - Kavi on Pairing Duty
339B - Xenia and Ringroad
189A - Cut Ribbon
1182A - Filling Shapes
82A - Double Cola
45A - Codecraft III
1242A - Tile Painting
1663E - Are You Safe
1663D - Is it rated - 3
1311A - Add Odd or Subtract Even
977F - Consecutive Subsequence
939A - Love Triangle
755A - PolandBall and Hypothesis
760B - Frodo and pillows
1006A - Adjacent Replacements
1195C - Basketball Exercise
1206A - Choose Two Numbers