這是題解的代碼,代碼風格十分的完美,參照的寫一下
這題是二分或者兩點法類型,用到的是滑動窗口的思路,在窗口內的空房間的數目是必定的
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); }