题解 CF1303A 【Erasing Zeroes】

ShineEternal

2020-02-13 08:27:51

Solution

[更佳阅读效果](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; } ```