作用
把一个大字符串分成好多个小字符串
这些小字符串的最小后缀,就是其本身
求出这些小字符串的右端点下标
#include<bits/stdc++.h>
using namespace std;
char s[5000005];
int n,ans;
vector<int> a;
int main()
{
scanf("%s",s+1);
n=(int)strlen(s+1);
int x;
for(int i=1;i<=n;)
{
int j=i,k=i+1;//初始化
while(k<=n&&s[j]<=s[k])
{
if(s[j]<s[k])j=i;//合并为一整个
else j++;//保持循环不变式
k++;
}
while(i<=j)//从v的开头重新开始
{
x=i+k-j-1;//x就是那个下标。
//cout<<x<<' ';
//a.push_back(x);//可以把x存进数组里
i+=k-j;
}
}
ans=0;
for(int i=0;i<a.size();i++)
{
//cout<<a[i]<<' ';
ans^=a[i];
}
cout<<ans;
return 0;
}
标签:int,好多个,char,分解,Lyndon,字符串
From: https://www.cnblogs.com/yzzyang/p/18151751