题解 CF1303A 【Erasing Zeroes】
ShineEternal
2020-02-13 08:27:51
[更佳阅读效果](https://blog.csdn.net/kkkksc03/article/details/104290384)
## description:
- 给定一个由 $0\ 1$ 组成的字符串 $s$。
- 你需要去掉一些 $0$,使得串内所有的 $1$ 都连续。
- 问最小去掉的 $0$ 的个数。
- **每个输入有多组数据**,数据组数不大于 $100$。
- 字符串长度不大于 $100$ ,且保证由 $0\ 1$ 组成。
- translate by @[ShineEternal](https://www.luogu.com.cn/user/45475)。
## solution:
乱搞算法,欢迎来hack /kel。
----
我的玄学思路是删掉夹在两个 $1$ 之间的 $0$ ,然后再判断一下开头的前导 $0$ 即可。
---
但是在上面那句话说完思路后发现没必要统计 $0$ 的数量,只需要算这个区间内的数字个数即可。
所以找到了一种大概不玄学的算法。
~~但是代码懒得写了。~~
## code:
```cpp
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
char s[105];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int ans=0,sum=0,flag=0;
cin>>s;
for(int i=0;i<strlen(s);i++)
{
if(s[i]=='1')
{
if(flag==1)
{
ans+=sum;
//printf("%d ",i);
sum=0;
flag=1;
}
else
flag=1;
}
if(s[i]=='0')
{
sum++;
}
}
int tmp=0;
for(int i=0;i<strlen(s);i++)
{
if(s[i]!='0')break;
tmp++;
}
if(ans==0)
{
printf("0\n");
}
else
printf("%d\n",ans-tmp);
}
return 0;
}
```