rt.复杂度应该是正确的,但是 T,可能是常数太大。
#include<bits/stdc++.h>
#define int long long
#define PII pair<int,int>
#define INF 0x3f3f3f3f
#define INFLL 0x3f3f3f3f3f3f3f3f
#define rep(k,l,r) for(int k=l;k<=r;++k)
#define per(k,r,l) for(int k=r;k>=l;--k)
#define cl(f,x) memset(f,x,sizeof(f))
using namespace std;
const int N=2e3+5;
char s[N];
int res[N],siz[N],nxt[N];
signed main() {
int T;
scanf("%lld",&T);
while(T--) {
int n,k,x;
scanf("%lld%lld%lld",&n,&k,&x); --x;
scanf("%s",s+1);
int p=1,sum=0;
rep(i,1,n) {
if(s[i]=='a'&&s[i-1]=='*')
siz[p]=sum+1,++p,sum=0;
else if(s[i]=='*')
sum+=k;
}
if(sum)
siz[p]=sum+1,++p;
--p;
nxt[p+1]=1;
rep(i,1,p) nxt[i]=0;
per(i,p,1) {
if(1.0*nxt[i+1]*siz[i]>1.0*x)
break;
nxt[i]=nxt[i+1]*siz[i];
}
rep(i,2,p+1) {
if(nxt[i]==0)
continue;
res[i-1]=x/nxt[i];
x-=res[i-1]*nxt[i];
}
p=1;
rep(i,1,n) {
if(s[i]=='a')
putchar('a');
else if(s[i-1]!='*') {
while(res[p]--)
putchar('b');
++p;
}
}
puts("");
}
return 0;
}