这是题解的代码,代码风格十分的完美,参照的写一下
这题是二分或者两点法类型,用到的是滑动窗口的思路,在窗口内的空房间的数目是必定的
next函数的编写颇有技巧,能够当作模板记一下函数用途是获取下一个知足条件的元素spa
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #include<string> #include<vector> #define DEBUG(x) cout<<#x<<" = "<<x<<endl using namespace std; const int MAXN=1e5+10; const int INF=0x7f7f7f7f; int n,k; char room[MAXN]; int next(int i)//下一间空房子 { do { i++; }while(i<n&&room[i]=='1'); return i; } int main() { // freopen("in.txt","r",stdin); scanf("%d%d\n",&n,&k); scanf("%s",room); int l=next(-1),r=l,p=l; for(int i=0;i<k ;i++ ){ r=next(r); } int ans=INF; while(r<n){ while(max(p-l,r-p)>max(next(p)-l,r-next(p))){ p=next(p); } ans=min(ans,max(p-l,r-p)); l=next(l); r=next(r); } printf("%d\n",ans); }