BSTRING
Given below c++ code is for ins14a spoj or bstring spoj.
Hint :- Think of bringing all one's to it median in windows of 'm' ones.
/*
===================================================
Name :- Nishant Raj
Email :- raj.nishant360@gmail.com
College :- Indian School of Mines
Branch :- Computer Science and Engineering
Time :- 18 October 2015 (Sunday) 22:05
===================================================*/
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair < int , int >
#define pb push_back
#define mp make_pair
#define mod 1000000009
int main(){
int t;
scanf("%d",&t);
while(t--){
char s[50009];
ll m;
scanf("%lld %s" , &m ,s);
int n = strlen(s);
vector<ll> position;
position.pb(0);
for(int i = 0 ; i < n ; i++)
if(s[i] == 49)
position.pb(i+1);
ll median = m/2 + 1;
ll left = 0 , right = 0;
for(int i = 0 ; i < median ; i++)
left += position[i];
for(int i = median + 1 ; i<=m ; i++)
right += position[i];
ll ans = right - left + (2*median - m - 1)*position[median];
int var_median = median;
for(int i = m+1 , j = 1 ; i < position.size() ;j++, i++){
left -= position[j];
left += position[var_median];
var_median++;
right -= position[var_median];
right += position[i];
ll temp = right - left + (2*median - m - 1)*position[var_median];
ans = min(ans , temp);
}
ans -= (m*m + 2*median*(median - 1) - 2*m*median + m)/2;
printf("%lld\n", ans);
}
return 0;
}
No comments:
Post a Comment
Your comment is valuable to us