Lang:G++
Edit12345678910111213141516171819202122232425262728293031#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<cstring> // strlen#include<cmath>#include<set>#include<queue>#include<map>#include<string>#include<limits.h> // INT_MAX#include<functional>#include<algorithm>#include<stack>using namespace std;const int maxn = 1e6+3;typedef long long LL;// SAM: suffix auto machine// 后缀自动机int NEXT_FREE_IDX = 0;int maxlen[2*maxn+10], minlen[2*maxn+10], trans[2*maxn+10][26], slink[2*maxn+10]; //每add一个字符最少增加1个,最多增加两个状态int edpts[2*maxn+10],indegree[2*maxn+10], containPrefix[2*maxn+10];int new_state( int _maxlen, int _minlen, int* _trans, int _slink){// 新建一个结点,并进行必要的初始化。maxlen[NEXT_FREE_IDX] = _maxlen;minlen[NEXT_FREE_IDX] = _minlen;for( int i(0); i < 26; i++ ){if( _trans==NULL )trans[NEXT_FREE_IDX][i] = -1;else