Lyndon 分解模板
https://www.luogu.com.cn/problem/P6114
#include <bits/stdc++.h>
using namespace std;
const int N=5e6+5;
char s[N];
int n,ans;
int main(){
scanf("%s",s+1),n=strlen(s+1);
for(int i=1;i<=n;){
int j=i,k=i+1;
while(k<=n&&s[j]<=s[k])j=s[j]==s[k++]?j+1:i;
while(i<=j)i+=k-j,ans^=i-1;
}
cout<<ans;
}

浙公网安备 33010602011771号