Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from __future__ import division, print_function
- def main():
- for _ in range(int(input())):
- n, points = map(int, input().split())
- s = input()
- pref_b = [0]*(n+1)
- for i in range(1,n+1):
- if s[i-1] == 'b':
- pref_b[i] = 1 + pref_b[i-1]
- else :
- pref_b[i] = pref_b[i-1]
- count_a = 0
- answer_index = -1
- for i in range(n - 1, -1, -1):
- temp_points = points
- count_b = pref_b[i+1]
- x = min(count_a, points)
- temp_points -= x
- if temp_points//2 + x >= count_b:
- answer_index = i
- break
- if s[i] == 'a':
- count_a+=1
- result = list(s)
- if answer_index == -1:
- print(''.join(result))
- continue
- for i in range(answer_index+1):
- result[i] = 'a'
- total_replace = count_b
- while total_replace*2 + (count_b - total_replace) > points:
- total_replace -=1
- swaps_required = count_b - total_replace
- j = -1
- while swaps_required > 0:
- if result[j] == 'a':
- result[j] = 'b'
- swaps_required -= 1
- j -= 1
- print(''.join(result))
- ######## Python 2 and 3 footer by Pajenegod and c1729
- # Note because cf runs old PyPy3 version which doesn't have the sped up
- # unicode strings, PyPy3 strings will many times be slower than pypy2.
- # There is a way to get around this by using binary strings in PyPy3
- # but its syntax is different which makes it kind of a mess to use.
- # So on cf, use PyPy2 for best string performance.
- py2 = round(0.5)
- if py2:
- from future_builtins import ascii, filter, hex, map, oct, zip
- range = xrange
- import os, sys
- from io import IOBase, BytesIO
- BUFSIZE = 8192
- class FastIO(BytesIO):
- newlines = 0
- def __init__(self, file):
- self._file = file
- self._fd = file.fileno()
- self.writable = "x" in file.mode or "w" in file.mode
- self.write = super(FastIO, self).write if self.writable else None
- def _fill(self):
- s = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
- self.seek((self.tell(), self.seek(0,2), super(FastIO, self).write(s))[0])
- return s
- def read(self):
- while self._fill(): pass
- return super(FastIO,self).read()
- def readline(self):
- while self.newlines == 0:
- s = self._fill(); self.newlines = s.count(b"\n") + (not s)
- self.newlines -= 1
- return super(FastIO, self).readline()
- def flush(self):
- if self.writable:
- os.write(self._fd, self.getvalue())
- self.truncate(0), self.seek(0)
- class IOWrapper(IOBase):
- def __init__(self, file):
- self.buffer = FastIO(file)
- self.flush = self.buffer.flush
- self.writable = self.buffer.writable
- if py2:
- self.write = self.buffer.write
- self.read = self.buffer.read
- self.readline = self.buffer.readline
- else:
- self.write = lambda s:self.buffer.write(s.encode('ascii'))
- self.read = lambda:self.buffer.read().decode('ascii')
- self.readline = lambda:self.buffer.readline().decode('ascii')
- sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
- input = lambda: sys.stdin.readline().rstrip('\r\n')
- # Cout implemented in Python
- import sys
- class ostream:
- def __lshift__(self,a):
- sys.stdout.write(str(a))
- return self
- cout = ostream()
- endl = '\n'
- # Read all remaining integers in stdin, type is given by optional argument, this is fast
- def readnumbers(zero = 0):
- conv = ord if py2 else lambda x:x
- A = []; numb = zero; sign = 1; i = 0; s = sys.stdin.buffer.read()
- try:
- while True:
- if s[i] >= b'0' [0]:
- numb = 10 * numb + conv(s[i]) - 48
- elif s[i] == b'-' [0]: sign = -1
- elif s[i] != b'\r' [0]:
- A.append(sign*numb)
- numb = zero; sign = 1
- i += 1
- except:pass
- if s and s[-1] >= b'0' [0]:
- A.append(sign*numb)
- return A
- if __name__== "__main__":
- main()
Add Comment
Please, Sign In to add comment