cin的代码
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define mod 1000000007
#define inf 0x3f
#define ll long long
//#define ls i<<1
//#define rs i<<1|1
#define pi 3.1415926
#define maxn 200005
ll dp[105][105];
int main()
{
string s1,s2;
ll n1,n2;
while(cin>>s2>>n2>>s1>>n1)
{
int flag=0;
ll l1=s1.size();
ll l2=s2.size();
if(n1==0||n2==0||l1==0||l2==0||n2*l2>n1*l1)
{
printf("0\n");
continue;
}
for(ll i=0; i
{
ll k=1;//k是字符总数
for(ll j=0; j
{
ll cnt=0;//cnt是找一个字符需要几个字符
while(s1[(i-1+k+cnt)%l1]!=s2[j])
{
cnt++;
if(cnt>l1){ printf("0\n"); flag=1; break;}//如果s1中没有s2[j] 答案为0
}
if(flag==1) break;
cnt++;
k+=cnt;
}
if(flag==1) break;
dp[i][0]=k-1;
}
if(flag==1) continue;
ll cnt=0;
for(ll j=1; (1<
{
cnt=j;
for(int i=0; i
{
dp[i][j]=dp[i][j-1]+dp[(i+dp[i][j-1])%l1][j-1];//通过倍增求从s1[i]开始找(1<
}
}
ll ans=0,tail=0,sum=0;
for(ll i=cnt;i>=0;i--)//用二进制合成最多s2
{
if(ans+dp[tail][i]<=l1*n1)
{
ans+=dp[tail][i];//字符个数
sum+=1<
tail=ans%l1;//当前字符尾端的位置
}
}
printf("%lld\n",sum/n2);
}
return 0;
} scanf的代码
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define mod 1000000007
#define inf 0x3f
#define ll long long
//#define ls i<<1
//#define rs i<<1|1
#define pi 3.1415926
#define maxn 200005
ll dp[105][105];
int main()
{
char s1[105],s2[105];
ll n1,n2;
while(scanf("%s%lld%s%lld",s2,&n2,s1,&n1)!=EOF)
{
int flag=0;
ll l1=strlen(s1);
ll l2=strlen(s2);
if(n1==0||n2==0||l1==0||l2==0||n2*l2>n1*l1)
{
printf("0\n");
continue;
}
for(ll i=0; i
{
ll k=1;//k是字符总数
for(ll j=0; j
{
ll cnt=0;//cnt是找一个字符需要几个字符
while(s1[(i-1+k+cnt)%l1]!=s2[j])
{
cnt++;
if(cnt>l1){ printf("0\n"); flag=1; break;}//如果s1中没有s2[j] 答案为0
}
if(flag==1) break;
cnt++;
k+=cnt;
}
if(flag==1) break;
dp[i][0]=k-1;
}
if(flag==1) continue;
ll cnt=0;
for(ll j=1; (1<
{
cnt=j;
for(int i=0; i
{
dp[i][j]=dp[i][j-1]+dp[(i+dp[i][j-1])%l1][j-1];//通过倍增求从s1[i]开始找(1<
}
}
ll ans=0,tail=0,sum=0;
for(ll i=cnt;i>=0;i--)//用二进制合成最多s2
{
if(ans+dp[tail][i]<=l1*n1)
{
ans+=dp[tail][i];//字符个数
sum+=1<
tail=ans%l1;//当前字符尾端的位置
}
}
printf("%lld\n",sum/n2);
}
return 0;
}