您的位置:首页 > 其它

01排序

2015-09-08 12:15 197 查看
给定一个01串(仅由‘ 0’或‘1’组成的字符串),现在想把这个数字串排序成“非递减”有序序列,请问至少需要多少次交换(任意两个位置交换)? 

输入描述:

输入数据第一行是一个正整数T(T<=100),表示有T组测试数据;
接下来的T行,每行给出01串。
数据保证——
50%的字符串长度在[1,100 ]
95%的字符串长度在[1,10000]
100%的字符串长度在[1,1000000]



输出描述:

对于每组测试数据,请输出排成“非递减有序序列”的最小交换次数。
每组输出占一行。



输入例子:

3
01
10
110



输出例子:

0
1
1

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#define N 1001000
using namespace std;
int i,j,k,m,n;
char s
;
int main()
{
int t;
scanf("%d",&t);
while (t--)
{
scanf("%s",s+1);
n=strlen(s+1);
i=1;
j=n;
int ans=0;
while (i<j)
{
while(i < j && s[i] == '0')
i++;
while(i < j &&s [j]=='1')
j--;
if(i < j)
{
ans++;
i++;
j--;
}
}
cout<<ans<<endl;

}
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: