【名词解释】
第一行输入两个整数
——字符串长度与目标子序列数量。
第二行输入一个长度为
的 01 串
(下标从
开始)。
若不存在满足要求的区间,输出单独一行-1;否则输出两个整数
表示区间端点(输出任意一组均可)。
4 2 0011
1 3
子串内的
子序列共有
个:
、
。
4 2 1110
-1
#参考双指针思路 n, k = map(int, input().split()) s = input().strip() if n == 0: print(-1) exit() cnt0 = 0 cnt1 = 0 l = 0 r = 0 # 初始化第一个字符 if s[0] == '0': cnt0 += 1 elif s[0] == '1': cnt1 += 1 num = 0 result = None while l < n and r < n: if num == k: result = (l + 1, r + 1) break if num < k: # 移动右指针 if r + 1 < n: r += 1 current_char = s[r] if current_char == '0': cnt0 += 1 else: num += cnt0 cnt1 += 1 else: # 无法移动右指针时,尝试移动左指针 current_char = s[l] if current_char == '0': num -= cnt1 cnt0 -= 1 else: cnt1 -= 1 l += 1 else: # 移动左指针 current_char = s[l] if current_char == '0': num -= cnt1 cnt0 -= 1 else: cnt1 -= 1 l += 1 # 检查退出循环后是否满足条件 if result is None and num == k and l <= r < n: result = (l + 1, r + 1) if result: print(result[0], result[1]) else: print(-1)