-
Notifications
You must be signed in to change notification settings - Fork 0
/
FlipToInvert.cpp
59 lines (51 loc) · 1.07 KB
/
FlipToInvert.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
int t;
cin>>t;
while(t--){
int n,k;
cin>>n>>k;
string s;
cin>>s;
int zeroes[n]={0};
int ones[n]={0};
int one=0;
for(int i=0;i<n;i++){
if(s[i]=='0'){
ones[i]=one;
}else{
one++;
}
}
int zero=0;
for(int i=n-1;i>=0;i--){
if(s[i]=='1'){
zeroes[i]=zero;
}else{
zero++;
}
}
int pairs=0;
for(int i=0;i<n;i++){
pairs+=zeroes[i];
}
int pair2=pairs;
int k1=k;
for(int i=0;i<n and k>0;i++){
if(s[i]=='1'){
pairs-=zeroes[i];
k--;
}
}
k=k1;
for(int i=n;i>=0 and k>0;i--){
if(s[i]=='0'){
pair2-=ones[i];
k--;
}
}
cout<<min(pairs,pair2)<<endl;
}
}