scanf过不了?
查看原帖
scanf过不了?
124676
JimmyFlower楼主2024/11/30 21:17
#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都能过

2024/11/30 21:17
加载中...