Question and Answer from L4-M1
import sys
def evolve_once(s_chars, ones_indices):
n = len(s_chars)
nxt = ['0'] * n
for i in ones_indices:
if i - 1 >= 0 and s_chars[i-1] == '0':
nxt[i-1] = '1'
if i + 1 < n and s_chars[i+1] == '0':
nxt[i+1] = '1'
return nxt
def final_after_k(s, K):
if K == 0:
return s
n = len(s)
s_chars = list(s)
ones = {i for i,ch in enumerate(s_chars) if ch == '1'}
if not ones:
return '0' * n
seen = {}
t = 0
cur_key = ''.join(s_chars)
seen[cur_key] = 0
while t < K:
nxt_chars = evolve_once(s_chars, ones)
t += 1
nxt_key = ''.join(nxt_chars)
if nxt_key in seen:
start = seen[nxt_key]
cycle_len = t - start
rem = (K - t) % cycle_len
s_cur = nxt_chars
ones_cur = {i for i,ch in enumerate(s_cur) if ch == '1'}
for _ in range(rem):
s_cur = evolve_once(s_cur, ones_cur)
ones_cur = {i for i,ch in enumerate(s_cur) if ch == '1'}
return ''.join(s_cur)
seen[nxt_key] = t
s_chars = nxt_chars
ones = {i for i,ch in enumerate(s_chars) if ch == '1'}
if not ones:
return ''.join(s_chars)
return ''.join(s_chars)
def main():
data = sys.stdin.read().strip().split()
if not data:
return
it = iter(data)
T = int(next(it))
out_lines = []
for _ in range(T):
N = int(next(it))
K = int(next(it))
S = next(it).strip()
out_lines.append(final_after_k(S, K))
sys.stdout.write("\n".join(out_lines))
if __name__ == "__main__":
main()