binary string s

Added: 2025-09-13 08:30:14

Question Image

binary string s

Answer

✏️ Edit
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()