1326 : 有序01字符串
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
对于一个01字符串,你每次可以将一个0修改成1,或者将一个1修改成0。那么,你最少需要修改多少次才能把一个01串 S 变为有序01字符串(有序01字符串是指满足所有0在所有1之前的01串)呢?
输入
第一行是一个整数 T,代表测试数据的组数。(1 ≤ T ≤ 10)
以下T行每行包含一个01串 S 。(1 ≤ |S| ≤ 1000)
输出
对于每组测试数据输出最少需要修改的次数。
样例输入
3
000111
010001
100000
样例输出
0
1
1
上点水题回忆回忆人生
-乍一看很简单 ,仔细一看也很简单。
枚举每个位置 ,看左边有多少0 右边有多少1
然后 取一个最小的该变量
#include <bits/stdc++.h>
using namespace std;
int a[1005],b[1005];
int main()
{
int t;
cin>>t;
while(t--)
{
string s;
cin>>s;
int v;
for(int i=0;s[i];i++)
{
v=i+1;
a[v]=a[v-1];
b[v]=b[v-1];
if(s[i]=='0') a[v]++;
else
{
b[v]++;
}
}
int mins=10000;
int l=strlen(&s[0]);
for(int i=0;s[i];i++)
{
v=i+1;
mins=min(l-v-(b[l]-b[v])+v-1-a[v-1],mins);
}
cout<<mins<<endl;
}
}