#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ri int
using namespace std;
typedef long long ll;
const int N=110,M=27;
char s1[110],s2[110];
ll n1,n2,l1,l2,f[N][M]; //f[i][j]:从s1[i]开始,需要多少位,能凑出2^j个s2[i]
int main()
{
while(scanf("%s %lld %s %lld",s2,&n2,s1,&n1)!=EOF)
{
l1=strlen(s1),l2=strlen(s2);
memset(f,0,sizeof(f));
bool bk=false;
int lk=0;
for(ri i=0;i<=l1-1;i++)
for(ri j=0,k=i;j<=l2-1;k++)
{
if(s1[k%l1]==s2[j]) j++,lk=k;
if(j>=l2){f[i][0]=k-i+1;bk=true;}
if(k-lk>=l1){bk=false;break;}
}
if(!bk){printf("0\n");continue;}
for(ri j=1;j<=M-1;j++)
for(ri i=0;i<=l1-1;i++)
f[i][j]=f[i][j-1]+f[(i+f[i][j-1])%l1][j-1];
ll ans=0;
for(ri i=0;i<=l1-1;i++)
{
ll p=i,res=0;
for(ri j=M-1;j>=0;j--)
if(f[p%l1][j]&&p+f[p%l1][j]<=n1*l1)
{
res+=1<<j;
p+=f[p%l1][j];
}
ans=max(ans,res);
}
printf("%lld\n",ans/n2);
}
return 0;
}
这个不知道为什么过不了,acwing上是能过的。
而且把while(scanf("%s %lld %s %lld",s2,&n2,s1,&n1)!=EOF)换成while(cin>>s2>>n2>>s1>>n1)就两个oj都能过