#include<bits/stdc++.h>
using namespace std;
vector<char> a , b;
vector<int> nxt , exnxt;
int main()
{
for (char c (getchar()) ; isalpha(c) ; c = getchar())
b.push_back(c);
for (char c (getchar()) ; isalpha(c) ; c = getchar())
a.push_back(c);
const int lena (a.size()) , lenb (b.size());
nxt.push_back(lena);
int p , k (1) , l (0);
while (l + 1 < lena && a[l] == a[l + 1]) ++l;
nxt.push_back(l);
p = l;
long long ans (lena + 1 ^ (l + 1 << 1));
for (int i (2) ; i < lena ; ++ i)
{
l = nxt[i - k];
if (i + l <= p)
nxt.push_back(l);
else
{
int j (max(0 , p - i + 1));
while (i + j < lena && a[i + j] == a[j]) ++ j;
nxt.push_back(j);
k = i ,
p = nxt[k] + k - 1;
}
ans ^= 1ll * (i + 1) * (nxt[i] + 1);
}
printf("%lld\n" , ans);
l = 0 , k = 0;
while (l < lena && l < lenb && a[l] == b[l]) ++ l;
exnxt.push_back(l);
ans = l + 1 , p = l - 1;
for (int i (1) ; i < lenb ; ++ i)
{
l = nxt[i - k];
if (i + l <= p)
exnxt.push_back(l);
else
{
int j (max(0 , p - i + 1));
while (i + j < lenb && j < lena && b[i + j] == a[j]) ++ j;
exnxt.push_back(j);
k = i ,
p = exnxt[k] + k - 1;
}
ans ^= 1ll * (i + 1) * (exnxt[i] + 1);
}
printf("%lld" , ans);
return 0;
}
这是我的AC代码,但是第二次k初始化时我赋值为1,能拿72分,nxt[0]和nxt[1]相差很大的,建议加强。