#include<bits/stdc++.h>
#define F(i,l,r) for(register int i=l;i<=r;i++)
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
#define p_b push_back
#define m_p make_pair
#define il inline
using namespace std;
const int N=2e7+5;
string s1,s2,s3;
int z[N],p[N<<1],fin[N],len1,len2,len3;
ll ans1,ans2;
void get_z(string s,int n,int *z) {
int L=0,R=0;
F(i,1,n-1) {
if(i>R) {
L=i,R=i;
while(R<n&&s[R-L]==s[R]) R++;
z[i]=--R-L+1;
}
else {
int k=i-L;
if(z[k]<R-i+1) z[i]=z[k];
else {
L=i;
while(R<n&&s[R-L]==s[R]) R++;
z[i]=--R-L+1;
}
}
}
}
int main() {
cin>>s1>>s2;
len1=s1.length();
len2=s2.length();
get_z(s2,len2,z);
z[0]=len2;
F(i,0,len2-1) ans1^=((i+1)*1ll*(z[i]+1));
printf("%lld\n",ans1);
s3=s2+'$'+s1;
len3=s3.length();
get_z(s3,len3,p);
F(i,len2+1,len3-1) ans2^=((i-len2)*1ll*(p[i]+1));
printf("%lld\n",ans2);
return 0;
}
是不是string
的+
操作巨慢无比???(大雾)
火车头&O2无果/fad