WA 9个求助
查看原帖
WA 9个求助
760824
MornStar楼主2024/3/26 13:43

link

#include<bits/stdc++.h>
using namespace std;
const int C=26,N=100005;
#define num(x) ((x)-'a')
long long n,l=1,r=1e18,ans;
string s,t;
long long pos[C][N],cnt[C][N],sum[C],lens,lent;
bool check(long long x){
	long long tmp=1,now=1;
	for(int i=0;i<lent;i++){
		if(cnt[num(t[i])][now]>=x)	now=pos[num(t[i])][cnt[num(t[i])][now]-x+1]+1;
		else{
			long long ct=x;
			ct-=cnt[num(t[i])][now],tmp++;
			if(ct%sum[num(t[i])]==0)	tmp+=ct/sum[num(t[i])]-1,now=pos[num(t[i])][1]+1;
			else	tmp+=ct/sum[num(t[i])],now=pos[num(t[i])][sum[num(t[i])]-ct%sum[num(t[i])]+1]+1;
			if(now==lens+1)	now=1,tmp++;
		}
		if(tmp>n){
			//			cerr<<"Wrong! "<<x<<" "<<tmp<<"\n";
			return 0;
		}
	}
	return 1;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	cin>>n>>s>>t;
	lens=s.length(),lent=t.length();
	for(int i=lens;i>=1;i--){
		sum[num(s[i-1])]++;
		//		to[i]=sum[num(s[i-1])];
		pos[num(s[i-1])][sum[num(s[i-1])]]=i;
		for(int j=0;j<26;j++)	cnt[j][i]=cnt[j][i+1];
		cnt[num(s[i-1])][i]++;
	}
	for(int i=0;i<lent;i++){
		if(!cnt[num(t[i])][1]){
			cout<<0<<"\n";
			return 0;
		}
	}
	while(l<=r){
		long long mid=(l+r)>>1;
		if(check(mid))	l=mid+1,ans=mid;
		else	r=mid-1;
	}
	cout<<ans<<"\n";
}
2024/3/26 13:43
加载中...