import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
long k = in.nextLong();
in.nextLine();
String s = in.nextLine();
char[] c = s.toCharArray();
int l = 0, r = 0, x = 0, y = 0;
long cnt = 0;
while (r < n) {
if (c[r++] == '0') x++;
else {
y++;
cnt += x;
}
while (cnt > k) {
if (c[l++] == '0') {
x--;
cnt -= y;
}else y--;
}
if (cnt == k) break;
}
if (cnt == k) System.out.printf("%d %d", l + 1, r);
else System.out.print(-1);
in.close();
}
}
维护窗口内0的数量和1的数量,以及01对数量,计为x、y和cnt。
当cnt小于k时窗口向右扩张,遇到1时cnt+=x;遇到0时y++。
当cnt大于k时窗口左端点右移,如果去掉的是0,cnt-=y,x--;去掉的是1,y--。
cnt等于k时break



京公网安备 11010502036488号