【POJ】1509 Glass Beads 【后缀自动机】
来源:互联网 发布:宝玛中走丝是什么软件 编辑:程序博客网 时间:2024/05/22 06:32
传送门:【POJ】1509 Glass Beads
my code:
#include <stdio.h>#include <string.h>#include <set>#include <algorithm>using namespace std ;typedef long long LL ;typedef unsigned long long ULL ;typedef pair < int , int > pii ;#define rep( i , a , b ) for ( int i = ( a ) ; i < ( b ) ; ++ i )#define For( i , a , b ) for ( int i = ( a ) ; i <= ( b ) ; ++ i )#define rev( i , a , b ) for ( int i = ( a ) ; i >= ( b ) ; -- i )#define clr( a , x ) memset ( a , x , sizeof a )const int MAXN = 40005 ;const int W = 26 ;struct Node {Node* next[W] ;Node* fail ;int len ;int l ;void newnode () {clr ( next , 0 ) ;fail = NULL ;len = l = 0 ;}} ;typedef Node* P_Node ;struct SAM {Node node[MAXN] ;P_Node last , root ;int cnt ;void init () {cnt = 0 ;node->newnode () ;root = last = node ;}void add ( int c ) {P_Node p = last , np = node + ( ++ cnt ) ;np->newnode () ;np->l = np->len = p->len + 1 ;last = np ;for ( ; p && !p->next[c] ; p = p->fail ) p->next[c] = np ;if ( !p ) np->fail = root ;else {if ( p->len + 1 == p->next[c]->len ) np->fail = p->next[c] ;else {P_Node q = p->next[c] , nq = node + ( ++ cnt ) ;*nq = *q ;nq->len = p->len + 1 ;nq->l = np->len ;q->fail = np->fail = nq ;for ( ; p && p->next[c] == q ; p = p->fail ) p->next[c] = nq ;}}}} ;SAM sam ;char s[MAXN] ;int n ;void solve () {sam.init () ;scanf ( "%s" , s ) ;n = strlen ( s ) ;rep ( i , 0 , n ) sam.add ( s[i] - 'a' ) ;rep ( i , 0 , n ) sam.add ( s[i] - 'a' ) ;P_Node now = sam.root ;rep ( i , 0 , n ) {rep ( j , 0 , W ) if ( now->next[j] ) {now = now->next[j] ;break ;}}printf ( "%d\n" , now->l - n + 1 ) ;}int main () {int T ;scanf ( "%d" , &T ) ;For ( i , 1 , T ) solve () ;return 0 ;}
0 0
- POJ 1509 Glass Beads 后缀自动机
- 【POJ】1509 Glass Beads 【后缀自动机】
- POJ 1509 Glass Beads 后缀自动机
- POJ 1509 Glass Beads 后缀自动机 或 后缀数组
- POJ 1509 Glass Beads【后缀自动机、最小表示法】
- POJ-1509 Glass Beads (字符串最小表示法&后缀自动机)
- POJ 1509 Glass Beads(最小表示法、后缀自动机)
- poj1509 Glass Beads,后缀自动机
- [POJ1509]Glass Beads && 后缀自动机
- SAM后缀自动机学习小记 Poj 1509 Glass Beads (字符串最小表示)
- uva 719 - Glass Beads(后缀自动机)
- uva 719 Glass Beads (后缀自动机)
- poj1509:Glass Beads(后缀自动机)
- poj 1509 Glass Beads
- POJ 1509 Glass Beads
- POJ 1509 Glass Beads
- [POJ] 1509 Glass Beads
- poj 1509 Glass Beads
- 在android.app.Application中定义全局变量
- 最近公共祖先---手动扩充占内存
- #pragma region /#pragma endregion
- java 字符串
- Python字符编码问题
- 【POJ】1509 Glass Beads 【后缀自动机】
- 企业实施ERP项目目的
- 糗大了
- hive与hbase数据交互的详解指南
- 各数据库 JAVA字段对应关系
- DevExpressControl中的GridControl展现主从表数据结构
- C++模板
- 黑马程序员——Objevtive-C——Foundation框架2
- 日期calendar月份加1