萌新求助卡常
  • 板块CF1620C BA-String
  • 楼主lsj2009Isj2OO9
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/7/4 17:48
  • 上次更新2023/11/3 11:37:03
查看原帖
萌新求助卡常
468657
lsj2009Isj2OO9楼主2023/7/4 17:48

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;
}
2023/7/4 17:48
加载中...