#include #include #include #include #include using namespace std; int T; int n,k; int arr[1001001],m=0; string st; struct nod{ int val; int ind; nod(int v,int i){ val=v; ind=i; } }; bool operator<(nod a, nod b){ return a.val > b.val; } priority_queue last_one; priority_queue last_zero; bool check(int x){ /*int ret=0; for(int i=0;ix){ last_one.pop(); } while(i-last_zero.top().ind>x){ last_zero.pop(); } if(st[i]=='0'){ cnt_zero++; } else { cnt_one++; } int dp_one=last_zero.top().val + cnt_zero; int dp_zero=last_one.top().val + cnt_one; if(i==n-1){ sol=min(dp_one,dp_zero); } last_one.push(nod(dp_one - cnt_one,i)); last_zero.push(nod(dp_zero - cnt_zero,i)); } return sol<=k; } int main(){ //freopen("07.txt","r",stdin); //freopen("07o.txt","w",stdout); cin>>T; while(T--){ cin>>n>>k; cin>>st; m=0; int mn=0,mn2=0; for(int i=0;i=mn || k>=mn2){ cout<<1<1){ int mid=(rr+ll)/2; if(check(mid)){ rr=mid; } else { ll=mid; } } cout<