求大佬帮忙看看吧,答案一直是0
查看原帖
求大佬帮忙看看吧,答案一直是0
181715
gjh303987897楼主2021/11/29 20:49
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define maxn 10001
using namespace std;
typedef unsigned long long ULL;
const int b_=97;
const int mod=21000000;
ULL sum1[maxn],sum2[maxn];
ULL pow[maxn];
int main()
{
    char a[maxn],b[maxn];
    scanf("%s%s",a+1,b+1);
    int len_a=strlen(a+1),len_b=strlen(b+1);//cout<<len_a<<len_b;
    for(int i=1;i<=len_a;i++) sum1[i]=(sum1[i-1]*b_+(a[i]-'a'+1))%mod;
    for(int i=1;i<=len_b;i++) sum2[i]=(sum2[i-1]*b_+(b[i]-'a'+1))%mod;
    pow[0]=1; for(int i=1;i<=max(len_a,len_b);i++) pow[i]=pow[i-1]*b_;
    int ans1=0,ans2=0,flag_a=0,flag_b=0;
    for(int i=1;i<=max(len_a,len_b);i++){
        if(i>len_a||i>=len_b) flag_a=1;
        if(sum1[i]==sum2[len_b]-sum2[len_b-i]*pow[i]&&flag_a==0) ans1++;
        else flag_a=1;

        if(i>len_b||i>=len_a) flag_b=1;
        if(flag_b==0&&sum2[i]==sum1[len_a]-sum1[len_a-i]*pow[i]) ans2++;
        else flag_b=1;
    }
    cout<<max(ans1,ans2);
    return 0;
}
2021/11/29 20:49
加载中...