Solution #
It’s obvious that the images we opened is a sub-segment of all images. We can loop over all the possible left endpoints and use two pointers to find the rightmost endpoint.
Code #
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
template<typename... T> void rd(T&... args) {((cin>>args), ...);}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n,a,b,T;
string s;
rd( n,a,b,T,s);
int ans=0;
vector<ll> t(2*n);
forn(i,n){
t[i]=t[i+n]=(s[i]=='w'?b+1:1);
}
for(int i=1;i<2*n;i++) t[i]+=t[i-1];
int r=n;
auto f=[&](int l,int r){
ll res=t[r]-t[l-1];
ll di=r-l+min(r-n,n-l);
return res+di*a;
};
for(int l=1;l<=n;l++){
while(r+1<l+n&&f(l,r+1)<=T) r++;
if(f(l,r)<=T) ans=max(ans,r-l+1);
}
cout<<ans;
return 0;
}