ABC WA on #03_05 求救
  • 板块学术版
  • 楼主roger_yrj
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/23 22:23
  • 上次更新2024/3/23 22:31:10
查看原帖
ABC WA on #03_05 求救
367521
roger_yrj楼主2024/3/23 22:23
/*
----------------------------
|        luogu:roger_yrj   |
|   Codeforces:yaoruijie   |
|      AtCoder:r09er_yrj   |
----------------------------
*/
#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define mp make_pair
#define A first
#define B second
#define pb push_back
#define ls (k<<1)
#define rs (k<<1|1)
#define INF 1061109567
#define Yes printf("Yes\n")
#define No printf("No\n")
#define YES printf("YES\n")
#define NO printf("NO\n")
#define ffl fflush(stdout)
using namespace std;
const int N=3e5+10;
inline ll read(){
	ll x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
int m,a[N],sum[N][30];
ll n;
string s,t;
bool check(ll k){
	if(!k)return 1;
	ll j=0;
	int L=0;
	for(int i=0;i<t.size();i++){
		int c=t[i]-'a';ll tmp=k;
		if(sum[m][c]==0)return 0;
		if(sum[m][c]-sum[L][c]<tmp)tmp-=sum[m][c]-sum[L][c],L=0,j++;
		if(!L&&tmp>0){
			ll tmpp=(tmp-1)/sum[m][c];
			j+=tmpp,tmp-=tmpp*sum[m][c];
		}
		int l=L,r=m;
		while(l<r){
			int mid=l+r>>1;
			if(sum[mid][c]-sum[L][c]>=tmp)r=mid;
			else l=mid+1;
		}
		L=l;
		if(L==m)L=0,j++;
	}
	if(L)j++;
	if(j<=n)return 1;
	return 0;
}
void solve(){
	cin>>n>>s>>t;
	m=s.size();
	for(int i=1;i<=m;i++){
		for(int j=0;j<26;j++)sum[i][j]=sum[i-1][j];
		sum[i][s[i-1]-'a']++;
	}
	ll l=1,r=1e17+10;
	while(l<r){
		ll mid=l+r>>1ll;
		if(check(mid))l=mid+1;
		else r=mid;
	}
	cout<<r-1;
}
int main(){
	solve();
	return 0;
}//... ... ... .....
2024/3/23 22:23
加载中...