前置知识:倍增
倍增的写法非常固定,1.预处理 2.查询
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define all(x) x.begin(),x.end()
#define no cout<<"No"<<endl
#define yes cout<<"Yes"<<endl
#define endl '\n'
#define x first
#define y second
typedef pair<int,int> PII;
const int N=100010;
const int mod=998244353;
const int INF=0x3f3f3f3f3f3f3f3f;
void solve(){
int n,a,b;cin>>n>>a>>b;
string s;cin>>s;
int nx[n][20]={};
PII cnt[n][20]={};
int c[2]={};
for(int i=0,j=0;i<n;){
c[s[j]-'0']++;
while(i<n&&(c[0]>=a||c[1]>=a)){
nx[i][0]=(j+1)%n;
if(c[0]>=a)c[s[i]-'0']--,cnt[i][0].x++;
if(c[1]>=a)c[s[i]-'0']--,cnt[i][0].y++;
i++;
}
j++;j%=n;
}
for(int j=1;j<20;j++){
for(int i=0;i<n;i++){
nx[i][j]=nx[nx[i][j-1]][j-1];
cnt[i][j].x=cnt[i][j-1].x+cnt[nx[i][j-1]][j-1].x;
cnt[i][j].y=cnt[i][j-1].y+cnt[nx[i][j-1]][j-1].y;
}
}
for(int i=0;i<n;i++){
int pos=i;
PII tmp={0,0};
for(int j=19;j>=0;j--){
if(tmp.x+cnt[pos][j].x<b&&tmp.y+cnt[pos][j].y<b){
tmp.x+=cnt[pos][j].x;
tmp.y+=cnt[pos][j].y;
pos=nx[pos][j];
}
}
tmp.x+=cnt[pos][0].x;
tmp.y+=cnt[pos][0].y;
if(tmp.x>=b)cout<<0;
else cout<<1;
}
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int _=1;
while(_--)solve();
return 0;
}