MnZn求助卡常,79pts
查看原帖
MnZn求助卡常,79pts
767353
Oct0pus1楼主2023/9/8 16:58

#5,#6,#14三点TLE,求助

#include<bits/stdc++.h>
using namespace std;
const int L=4e7+10;
#define int long long
int z[L],a,b;
char s1[L],s2[L];
signed main(){
    scanf("%s%s",s1,s2);
    int l1=strlen(s1),l2=strlen(s2);
    l1+=l2+1;
    s2[l2]='#';
    char *s=strcat(s2,s1);
    for(int i=0,l=0,r=0;i<l1;i++){
        if(i<=r && z[i-l]<r-i+1)z[i]=z[i-l];
        else{
            z[i]=max(0ll,r-i+1);
            while(i+z[i]<l1 && s[z[i]]==s[i+z[i]])z[i]++;
        }
        l=i;r=i+z[i]-1;
    }z[0]=l2;
    for(int i=0;i<l2;i++)a^=(i+1)*(z[i]+1);
    for(int i=l2+1;i<l1;i++)b^=(i-l2)*(z[i]+1);
//    for(int i=0;i<l1;i++)printf("%lld ",z[i]);
    printf("%lld\n%lld",a,b);
    return 0;
}
2023/9/8 16:58
加载中...